2011-06-20 10 views
3

docsによれば、アソシエーションに:autosave => falseを設定すると、親を保存するときにこれらの関連付けを保存しないでください。これは私のために働くようには見えません。私はちょうどバニラのRails 3.0.8アプリを作成しました。ここには何があります:ActiveRecordの自動保存:falseが動作しないように見える

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がなぜ保存されたのですか?

私は狂った薬を飲んでいるように感じる!私は何が欠けていますか?

更新:ネストされた属性機能を使用して構築されていない場合でも、は子供を自動的に保存するように見えます。これはバグだと思う。

+0

f.bars.first.new_record 'の出力は何'あなたが与えられたコードを実行した後? – Luke

+0

上記の 'f.bars'を出力しました。 'new_record?'はIDで永続化されているので、falseを返すことは明らかです。これもまた、 'accepts_nested_attributes_for'が使用された場合にのみ発生します – brad

答えて

0

accepts_nested_attributes_forを使用している場合、Innerpeacerの応答に加えて、自動保存属性をfalseに設定することは意味がありません。 accepts_nested_attributes_forを使用する理由の1つは、子と親を同時に保存することです。

何ができます:

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'})] 
関連する問題