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

予想どおり、「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

4

1 に答える 1

14

新しい関連アイテムの作成と既存のアイテムとの関連付けを理解しようとしていると思います。

新しいアイテムを作成するには、それが機能しているようです。shop_attributes で id を渡したときに、まだ存在しない関連付けを検索しているため、機能しませんでした。

既存のアイテムに関連付けようとしている場合は、次を使用する必要があります。

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

これにより、現在の商品のショップが ID 'shop_id' のショップに割り当てられます。(商品には「shop_id」列が必要です。)

于 2010-12-20T20:22:38.987 に答える