Я обновил до 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 для создания вложенных объектов в новых записях?