Rails 3: Как работает "accepts_nested_attributes_for"?
Рассмотрим следующую ассоциацию:
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
, чтобы этот магазин был назначен ему?
Ответы
Ответ 1
Я думаю, что вы пытаетесь понять, как создать новый связанный элемент или связать с существующим элементом.
Для создания нового элемента вам кажется, что он работает.
Когда вы передали id в shop_attributes, это не сработало, потому что он ищет связь, которая еще не существует.
Если вы пытаетесь связать существующий элемент, вы должны использовать следующее:
params[:product][:shop_id] = "20"
Это назначит текущий магазин товаров магазину с id 'shop_id'. (Продукт должен иметь столбец "shop_id".)