【问题标题】:Rake db:seed not associating a created object to it's parent model correctly?Rake db:seed 没有正确地将创建的对象与其父模型相关联?
【发布时间】:2015-05-24 23:40:52
【问题描述】:

我有一个用户模型,它有一个图书馆,里面有很多书。

在我的种子文件中,我这样做:

user1 = User.new
user1.email = "test@email.com"
user1.name  = "testname"
user1.password = "password"
user1.library = Library.new
user1.library.save!
book1 = Book.create!(hash_of_attributes)
user1.library.books << book1
puts "book1 library_id " + book1.library_id.to_s
user1.save!

puts "book1 library_id " + book1.library_id.to_s 这行清楚地输出了 1 的值,所以我们知道 library_id 属性在新创建的 Book 模型上设置为 1。

但是,在运行 rake db:seed 之后,我运行 rails 控制台并执行以下操作:

User.first.library.books

只为找到

<ActiveRecord::Associations::CollectionProxy []>

运行 Book.first 显示

 library_id: nil

所以这本书是创建的,只是它没有与我的图书馆正确关联,而我的图书馆与我的用户模型正确关联。

发生了什么事?

运行 Rails 4.1.6

【问题讨论】:

  • 需要保存用户的id才能成为库的外键。
  • 我试过了(尽管它们的型号名称不同,但关系相同),但你的代码对我有用。我的Rails的版本是4.1.7,不知道是不是这个问题

标签: ruby-on-rails ruby activerecord rake


【解决方案1】:
user1 = User.new
user1.email = "test@email.com"
user1.name  = "testname"
user1.password = "password"
user1.save!

首先,您需要保存用户的 ID。然后....

user1.library = Library.new
library1 = user1.library.save!

book = Book.create!(hash_of_attributes)
book1 = library1.books << book
puts "book1 library_id " + book1.library_id.to_s

【讨论】:

  • 在添加书籍之前保存用户,谢谢一百万,这非常令人沮丧。但是,我很好奇为什么这是因为书籍连接到图书馆而不是用户,所以你会认为一旦图书馆被保存并确定了它的 ID,一本书就可以设置为图书馆,然后图书馆设置为用户?
【解决方案2】:

问题是当您尝试对其进行关联时,您的用户还没有 id。只需对脚本进行快速更新,您就可以开始了:

user1 = User.create(email: "test@email.com", name: "testname", password: "password")
user1.library.create
user1.library.books.create(hash_of_attributes)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-05
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多