2011-06-22 5 views
3

古いコードをself.attribute_id:Railsの3.1にcreate_attributeは前に3.1が設定されていないレールに保存Railsの3.0で働いて、

belongs_to :primary_stream 

before_save :autocreate_primary_stream, :if=>lambda {|a| a.primary_stream.nil?} 

def autocreate_primary_stream 
    self.create_primary_stream() 
end 

self.primary_stream人口、およびself.primary_stream_idはnilになっています。レコードが保存されると、primary_stream_idはデータベースにnilとして保存されます。

私は私が期待する動作を得るために、これを実行しなければならなかった:

belongs_to :primary_stream 

before_save :autocreate_primary_stream, :if=>lambda {|a| a.primary_stream.nil?} 

def autocreate_primary_stream 
    self.create_primary_stream() 
    self.primary_stream_id = primary_stream.id 
end 

は何かが変わったのか、私は非常に愚かな何かを行っていますか?

+0

accept_nested_attributes_forを使用しましたか? – rtdp

+0

彼はネストされた属性を割り当てていないので、それが適切かどうかはわかりません –

答えて

2

3.1で導入されたコールバックでRailsが関連付けを処理する方法にバグがあるようです。私が知る限り、before_saveでbelongs-to-associationを割り当てることは、外部キーを所有者モデルに割り当てません。

belongs_to :primary_stream 

before_validation :autocreate_primary_stream, :if=>lambda {|a| a.primary_stream.nil?} 

def autocreate_primary_stream 
    self.build_primary_stream() 
end 

と自動保存された所有者のレコードと一緒になり、プライマリストリーム -

しかし、3.1で自動保存会合ものは、これを達成するためのクリーンな方法を提供します。

https://github.com/rails/rails/issues/1594が多少関連しました。

関連する問題