Rails has_one vs has_many关联

时间:2018-07-09 16:49:05

标签: ruby-on-rails ruby associations has-many has-one

我有一个模型说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} }。

我尝试关注官方文档以及与此相关的其他一些文章。但是不知何故,我还是不清楚。

1 个答案:

答案 0 :(得分:3)

此行为的原因是Rails创建 每个create_#{association_name}的{​​{1}}形式的方法。如果您需要其他信息,可以使用docs

因此,要为has_one association_name创建一个title,您将需要以下内容:

book

它会执行您所期望的把戏

相关问题