我有一个模型说Book
,另一个模型是说Title
。关联在下面简单定义。
class Book < ApplicationRecord
has_one :title
end
class Title < ApplicationRecord
belongs_to :book
end
现在,如果我在book_id
中生成具有外键为Title
的架构并为Book
创建新记录,则无法创建新的{{1 }}通过Title
记录,book.title.create!
返回book.title
。
但是,如果我将关联更改为
nil
然后,我显然可以使用 class Book < ApplicationRecord
has_many :titles
end
创建新的Title
记录。因此,要使其与book.title.create!
关联一起工作,我要做的是像has_one
这样的事情。
在后一种情况下,当我检查book.title = Title.create!(foo: "bar", book_id: book.id)
的值时,控制台将返回book.title
,但对于前者,<ActiveRecord::Associations::CollectionProxy []>
将返回book.title
,因此{{1} }。
我尝试关注官方文档以及与此相关的其他一些文章。但是不知何故,我还是不清楚。
答案 0 :(得分:3)
此行为的原因是Rails
创建
每个create_#{association_name}
的{{1}}形式的方法。如果您需要其他信息,可以使用docs。
因此,要为has_one association_name
创建一个title
,您将需要以下内容:
book
它会执行您所期望的把戏