我已升级到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
Run Code Online (Sandbox Code Playgroud)
如果我尝试Product使用嵌套创建一个新的,Note如下所示:
params = {:name => 'Test', :notes_attributes => {'0' => {'body' => 'Body'}}}
p = Product.new(params)
p.save!
Run Code Online (Sandbox Code Playgroud)
它使用以下消息验证失败:
ActiveRecord::RecordInvalid: Validation failed: Notes product can't be blank
Run Code Online (Sandbox Code Playgroud)
我明白为什么会这样 - 这是因为validates_presence_of :product_id在Note课堂上,并且因为在保存新记录时,该Product对象没有id.但是,我不想删除此验证; 我认为删除它是不正确的.
我也可以通过手动创建第Product一个,然后添加Note,但这会破坏简单性来解决问题accepts_nested_attributes_for.
是否有标准的Rails方法在新记录上创建嵌套对象?