次の関連付けを検討してください。
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
「My Shop」という名前の新しいショップが作成され、@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
このショップが割り当てられるように?
新しい関連アイテムを作成するのか、既存のアイテムに関連付けるのかを理解しようとしていると思います。
新しいアイテムを作成するために、機能しているようです。 shop_attributesでIDを渡したとき、まだ存在しない関連付けを検索しているため、機能しませんでした。
既存のアイテムに関連付けようとしている場合は、以下を使用する必要があります。
params[:product][:shop_id] = "20"
これにより、現在の製品のショップがID「shop_id」のショップに割り当てられます。 (商品には「shop_id」列が必要です。)