Подтвердить что ты не робот

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, чтобы этот магазин был назначен ему?

4b9b3361

Ответ 1

Я думаю, что вы пытаетесь понять, как создать новый связанный элемент или связать с существующим элементом.

Для создания нового элемента вам кажется, что он работает. Когда вы передали id в shop_attributes, это не сработало, потому что он ищет связь, которая еще не существует.

Если вы пытаетесь связать существующий элемент, вы должны использовать следующее:

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

Это назначит текущий магазин товаров магазину с id 'shop_id'. (Продукт должен иметь столбец "shop_id".)