【发布时间】:2009-07-30 20:36:30
【问题描述】:
我已经升级到 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
我明白为什么会发生这种情况 - 这是因为 Note 类上的 validates_presence_of :product_id,并且因为在保存新记录时,Product 对象没有 id。但是,我不想删除此验证;我认为删除它是不正确的。
我也可以通过先手动创建Product,然后添加Note 来解决问题,但这会破坏accepts_nested_attributes_for 的简单性。
是否有在新记录上创建嵌套对象的标准 Rails 方法?
【问题讨论】:
标签: ruby-on-rails