34

考虑以下关联:

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正如预期的那样,创建了一个名为“My Shop”的新商店并将其分配给。

但是,我无法弄清楚shop_attributes包含 some时会发生什么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该商店将被分配给它的商店?

4

1 回答 1

14

我认为您正在尝试弄清楚创建新的关联项目与与现有项目关联。

对于创建新项目,您似乎可以正常工作。当您在 shop_attributes 中传递 id 时,它不起作用,因为它正在查找尚不存在的关联。

如果您尝试与现有项目关联,则应使用以下内容:

params[:product][:shop_id] = "20"

这会将当前产品的商店分配给 id 为“shop_id”的商店。(产品应该有一个“shop_id”列。)

于 2010-12-20T20:22:38.987 回答