小编pet*_*rjm的帖子

如何使用accepts_nested_attributes_for创建嵌套对象

我已升级到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_idNote课堂上,并且因为在保存新记录时,该Product对象没有id.但是,我不想删除此验证; 我认为删除它是不正确的.

我也可以通过手动创建第Product一个,然后添加Note,但这会破坏简单性来解决问题accepts_nested_attributes_for.

是否有标准的Rails方法在新记录上创建嵌套对象?

ruby-on-rails

22
推荐指数
2
解决办法
6896
查看次数

标签 统计

ruby-on-rails ×1