考虑以下关联:
class Product < ActiveRecord::Base
belongs_to :shop
accepts_nested_attributes_for :shop
end
如果
params[:product][:shop_attributes] = {"name" => "My Shop"}
我做了:
@product = Product.new(params[:product])
@product.save
创建一个名为“我的商店”的新商店,并按预期分配给@product
。
但是,我无法弄清楚当shop_attributes
包含某些id
时会发生什么,例如:
params[:product][:shop_attributes] = {"id" => "20", "name" => "My Shop"}
我收到以下错误:
Couldn't find Shop with ID=20 for Product with ID=
问题1
这意味着什么?
问题2
如果是这种情况,即商店的id
已知,并且已经存在此id
的商店,我该如何创建@product
以便此店铺将会被分配给它?
答案 0 :(得分:14)
我认为您正在尝试创建一个新的关联项目,而不是与现有项目相关联。
要创建新项目,您似乎可以使用它。 当你在shop_attributes中传递id时,它不起作用,因为它正在查找一个尚不存在的关联。
如果您尝试与现有项目关联,则应使用以下内容:
params[:product][:shop_id] = "20"
这会将当前产品的商店分配给ID为“shop_id”的商店。 (产品应该有'shop_id'列。)