首页 > 解决方案 > Rails has_one vs has_many 关联

问题描述

我有一个模型 sayBook和另一个模型 say Title。关联在下面简单定义。

class Book < ApplicationRecord
    has_one :title
end

class Title < ApplicationRecord
    belongs_to :book
end

现在,如果我生成一个外键为book_idin的模式Title并为 创建一个新记录Book,我将无法Title 通过book.title.create!as book.titlereturns创建一个新记录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返回nil,因此NoMethod Error for nil class.

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

标签: ruby-on-railsrubyassociationshas-manyhas-one

解决方案


这种行为的原因是它以for everyRails的形式创建方法。如果您需要额外的信息,有这方面的文档create_#{association_name}has_one association_name

因此,要title为 a创建 a book,您需要类似以下内容:

book.create_title

它将执行您所期待的技巧


推荐阅读