ruby-on-rails - Rails has_one vs has_many 关联
问题描述
我有一个模型 sayBook
和另一个模型 say Title
。关联在下面简单定义。
class Book < ApplicationRecord
has_one :title
end
class Title < ApplicationRecord
belongs_to :book
end
现在,如果我生成一个外键为book_id
in的模式Title
并为 创建一个新记录Book
,我将无法Title
通过book.title.create!
as book.title
returns创建一个新记录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
.
我尝试关注官方文档和堆栈中的其他一些帖子。但不知何故,我仍然不清楚。
解决方案
这种行为的原因是它以for everyRails
的形式创建方法。如果您需要额外的信息,有这方面的文档。create_#{association_name}
has_one association_name
因此,要title
为 a创建 a book
,您需要类似以下内容:
book.create_title
它将执行您所期待的技巧
推荐阅读
- python - 我使用 sympy 绘制了一个隐式函数。但是,情节似乎不像曲线
- c# - VS 部署 .Net Framework 应用程序时如何避免再次发布?
- javascript - 为什么我的 React 代码呈现不同的 switch case?
- listview - 如何在间距区域拖动UMG ListView
- reactjs - 当前没有配置加载器来处理这个文件 构建反应应用程序时出错
- python - pyspark ALS 推荐系统错误 - SparkContext 已关闭;迷失模式;
- laravel - Laravel8 打印的个人 ID 的 pdf 文件
- ios - SwiftUI - 将函数 ID 设置为 post.id
- macos - 链接 libPocoCrypto.dylib 时,在 Mac Catalina 上构建 Poco 失败
- node.js - 如何从 nodeJs 应用程序在 imageKit 上上传多个图像?