Rya*_*yan 11 activerecord ruby-on-rails
假设我有类似的东西:
@order = Order.new(status: :pending)
@item = @order.items.build(title: "Shirt")
Run Code Online (Sandbox Code Playgroud)
当我尝试调用时@item.order,我得到一个未找到的错误,我想这是因为它仍未保存到数据库,但是如何使它指向构建的对象而不保存任何对象?
@item.order # Not Found - Tries to fetch from the DB
Run Code Online (Sandbox Code Playgroud)
要完成这项工作,您必须告诉order您的项目模型的关联,它是您的关联的逆向items或您订购模型,反之亦然:
像这样:
class Item < ActiveRecord::Base
belongs_to :order, inverse_of: :items
end
class Order < ActiveRecord::Base
has_many :items, inverse_of: :order
end
Run Code Online (Sandbox Code Playgroud)
这样,即使在保存到数据库之前,您的关联也将正确设置.
编辑:如果您不想这样,您可以始终明确指定关联:
@item = @order.items.build(title: "Shirt")
@item.order = @order
Run Code Online (Sandbox Code Playgroud)
或者在一行中:
@item = @order.items.build(title: "Shirt", order: @order)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |