Mis*_*hko 33 ruby-on-rails nested-attributes ruby-on-rails-3
考虑以下关联:
class Product < ActiveRecord::Base
belongs_to :shop
accepts_nested_attributes_for :shop
end
Run Code Online (Sandbox Code Playgroud)
如果
params[:product][:shop_attributes] = {"name" => "My Shop"}
Run Code Online (Sandbox Code Playgroud)
我这样做:
@product = Product.new(params[:product])
@product.save
Run Code Online (Sandbox Code Playgroud)
@product
正如预期的那样,创建一个名为"我的商店"的新商店并分配给它.
但是,我无法弄清楚当shop_attributes
包含一些内容时会发生什么id
,例如:
params[:product][:shop_attributes] = {"id" => "20", "name" => "My Shop"}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
Couldn't find Shop with ID=20 for Product with ID=
Run Code Online (Sandbox Code Playgroud)
问题1
这意味着什么?
问题2
如果是这种情况,即id
商店已知,并且商店id
已经存在,我该如何创建@product
这样的商店将被分配给它?
cle*_*nsp 14
我认为您正试图找出创建新关联项目与关联现有项目.
要创建一个新项目,您似乎可以使用它.当你在shop_attributes中传递id时,它不起作用,因为它正在查找一个尚不存在的关联.
如果您尝试与现有项目关联,则应使用以下内容:
params[:product][:shop_id] = "20"
Run Code Online (Sandbox Code Playgroud)
这会将当前产品的商店分配给ID为"shop_id"的商店.(产品应该有'shop_id'列.)