3

docsによると、関連付けを設定: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」をクリックすると、これも証明されます。

:autosave オプションは、accepts_nested_attributes_for が使用されるすべての関連付けで自動的に有効になることに注意してください。

于 2011-09-12T23:44:49.783 に答える