Я обновился до Rails 2.3.3 (с 2.1.x) и пытаюсь выяснить метод accepts_nested_attributes_for
. Я могу использовать метод для обновления существующих вложенных объектов, но не могу использовать его для создания новых вложенных объектов. Придуманный надуманный пример:
class Product < ActiveRecord::Base
has_many :notes
accepts_nested_attributes_for :notes
end
class Note < ActiveRecord::Base
belongs_to :product
validates_presence_of :product_id, :body
end
Если я попытаюсь создать новый Product
с вложенным Note
следующим образом:
params = {:name => 'Test', :notes_attributes => {'0' => {'body' => 'Body'}}}
p = Product.new(params)
p.save!
Не проходит проверки с сообщением:
ActiveRecord::RecordInvalid: Validation failed: Notes product can't be blank
Я понимаю, почему это происходит - это из-за validates_presence_of :product_id
в классе Note
и потому, что во время сохранения новой записи объект Product
не имеет id
. Однако я не хочу удалять эту проверку; Я думаю, что было бы неправильно удалить его.
Я мог бы также решить эту проблему, сначала вручную создав Product
, а затем добавив Note
, но это лишает простоты accepts_nested_attributes_for
.
Существует ли стандартный способ Rails для создания вложенных объектов в новых записях?