[英]Rails has_one vs has_many association
我有一个模型说Book
和另一个名为Title
模型。 这些关联简单地定义如下。
class Book < ApplicationRecord
has_one :title
end
class Title < ApplicationRecord
belongs_to :book
end
现在,如果我在Title
生成一个带有book_id
外键的模式并为Book
创建一个新记录,我无法通过book.title.create!
创建一个新的Title
记录book.title.create!
book.title
返回nil
。
但是,如果我将关联更改为
class Book < ApplicationRecord
has_many :titles
end
那么我显然能够使用book.title.create!
创建一个新的Title
记录book.title.create!
。 因此,我必须做的是使它与has_one
关联一起has_one
就像book.title = Title.create!(foo: "bar", book_id: book.id)
。
当我在后一种情况下检查book.title
的值时,控制台返回<ActiveRecord::Associations::CollectionProxy []>
但对于前者, book.title
返回nil
,因此返回NoMethod Error for nil class
的NoMethod Error for nil class
。
我试着关注这个官方文档和其他一些帖子。 但不知何故,它仍然不清楚。
这种行为的原因是Rails
为每个has_one association_name
以create_#{association_name}
的形式创建方法。 如果您需要额外的信息,可以使用此文档 。
因此,要为book
创建title
,您需要以下内容:
book.create_title
它会执行这个技巧,你期待的
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.