【问题标题】:Rails has_one vs has_many associationRails has_one vs has_many 关联
【发布时间】:2018-07-09 16:49:05
【问题描述】:

我有一个模特 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 返回nil

但是,如果我将关联更改为

 class Book < ApplicationRecord
    has_many :titles
 end

那么我显然可以使用book.title.create! 创建一个新的Title 记录。因此,要使其与 has_one 关联一起工作,我必须做的就是像 book.title = Title.create!(foo: "bar", book_id: book.id) 这样的事情。

当我在后一种情况下检查book.title 的值时,控制台返回&lt;ActiveRecord::Associations::CollectionProxy []&gt;,但对于前者,book.title 返回nil,因此返回NoMethod Error for nil class

我尝试关注官方文档和堆栈中的其他一些帖子。但不知何故,我仍然不清楚。

【问题讨论】:

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


    【解决方案1】:

    这种行为的原因是Rails 创建 以create_#{association_name} 的形式为每个has_one association_name 提供方法。如果您需要更多信息,请联系docs

    因此,要为book 创建一个title,您需要类似:

    book.create_title
    

    它会执行你所期望的技巧

    【讨论】:

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