【问题标题】:Fails to seed: db with association播种失败:带有关联的数据库
【发布时间】:2015-05-12 14:22:17
【问题描述】:

Organization 和 Member 这两个模型具有 1:many 的关系。基于earlier question,我添加到我的组织模型文件中:

validate  :check_member
  private
  def check_member
    if members.empty?
      errors.add(:base, 'User is not present')
    end
  end

因此,如果还创建了该组织的成员,它只会创建一个新组织。我相应地调整了我的种子文件,因为我现在无法在没有成员的情况下创建组织:

Organization.create!(   name: "Fictious business",
                        address: Faker::Address.street_address,
                        city: Faker::Address.city,
                        website: Faker::Internet.url,
                        subscription: true,
                        subs_exp_date: Faker::Date.forward(365),
                        actioncode: 111,
   members_attributes: [email: "help@example.com",
                        username: "helpzzzz", 
                        password: "foobar", 
                        password_confirmation: "foobar"])

但它未能播种上述内容,并给出错误消息:“ActiveRecord::RecordInvalid: Validation failed: User is not present”(参考def check_member 中定义的错误消息)。

有人知道我做错了什么吗?

更新:看起来是其他原因造成了问题。在开发中,我对播种没有任何问题。然而,当问题出现时,播种到 Heroku。通过更改种子文件,我发现当输入heroku run rake db:seed 时,它并没有使用当前更新的种子文件进行播种(虽然它正在这样做,但正在开发中)。它使用的是旧种子文件,其中第二部分 members_attributes 尚未包含。

这可能是什么原因? Heroku那边有问题吗?我也尝试过heroku pg:reset DATABASEheroku run rake db:migrate,然后是heroku run rake db:seed,但它仍在使用旧种子文件。

【问题讨论】:

  • 关于 Heroku:您是否将最新更改推送到 Heroku?
  • 是的,就是这样。我没有将种子文件的更改提交给 git,因此git push heroku 说“一切都是最新的”。如果您将此添加为解决方案,我会接受。

标签: ruby-on-rails ruby ruby-on-rails-4 seeding


【解决方案1】:

先创建成员,再创建组织:

member = Member.create!(email: ...)
Organization.create!(name: ..., members: [member])

关于 Heroku:您是否将最新更改推送到 Heroku?

【讨论】:

  • @Nick Read this 如果你想要一个完整的解释。
  • 看起来可能是 Heroku 问题?请参阅对原始帖子的添加更新。
猜你喜欢
  • 2017-06-14
  • 1970-01-01
  • 1970-01-01
  • 2018-07-17
  • 2018-07-21
  • 2021-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多