3

根据文档:autosave => false当您保存父级时,关联设置不应保存这些关联。这似乎对我不起作用。我刚刚创建了一个香草 Rails 3.0.8 应用程序,这就是我得到的:

class Foo < ActiveRecord::Base
  has_many :bars, :autosave => false
  accepts_nested_attributes_for :bars
end

class Bar < ActiveRecord::Base
  belongs_to :foo
end

f = Foo.new :name => 'blah', :bars_attributes => [{:name => 'lah'},{:name => 'lkjd'}]
f.save
f.bars
 => [#<Bar id: 1, name: "lah", foo_id: 1, created_at: "2011-06-20 20:51:02", updated_at: "2011-06-20 20:51:02">, #<Bar id: 2, name: "lkjd", foo_id: 1, created_at: "2011-06-20 20:51:02", updated_at: "2011-06-20 20:51:02">]

什么??为什么救了bars

我觉得我正在服用疯狂的药丸!!我错过了什么?

更新:看起来好像accepts_nested_attributes_for自动保存子项,即使它们不是使用嵌套属性功能构建的。它认为这是一个错误。

4

2 回答 2

5

这不是错误,而是有意为之。见http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

单击方法accepts_nested_attributes_for 上的“Source: show”也证明了这一点。

请注意,在使用 accept_nested_attributes_for 的每个关联上都会自动启用 :autosave 选项。

于 2011-09-12T23:44:49.783 回答
0

添加到 Innerpeacer 响应中,如果您使用 Accepts_nested_attributes_for,将 autosave 属性设置为 false 是没有意义的。使用 Accepts_nested_attributes_for 的原因之一是同时保存孩子和父母。

你可以做的是:

f = Foo.new :name => 'blah'
f.save
f.bars_attributes = [{:name => 'lah'},{:name => 'lkjd'}]

或者

f = Foo.new :name => 'blah'
f.save
f.bars = [Bars.new({:name => 'lah'}), Bars.new({:name => 'lkjd'})]
于 2014-01-09T17:34:42.967 回答