繁体   English   中英

Rails has_one vs has_many association

[英]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 classNoMethod Error for nil class

我试着关注这个官方文档和其他一些帖子。 但不知何故,它仍然不清楚。

这种行为的原因是Rails为每个has_one association_namecreate_#{association_name}的形式创建方法。 如果您需要额外的信息,可以使用此文档

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

book.create_title

它会执行这个技巧,你期待的

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM