0

これは通常のRailsの動作であり、基本的なものが欠けていると確信していますが、それは何ですか?

子供は親に属し、親には多くのメンバーがいます。

parent = Parent.create(:name=>"Kerkhoff, J")
child = parent.children.create(:first_name => "Sally")
puts child.parent.name    # ==> Kerkhoff, J
parent.update_attributes(:name=>'Zorro, A')
puts parent.name           # ==> 'Zorro, A'
puts child.parent.name    # ==> 'Kerkhoff, J'
child.save       # ==> true  (Does saving the child refresh its parent.name?)
puts child.parent.name    # ==> 'Kerkhoff, J'    (No)
child = Child.find(child.id)      # reload child from database
puts child.parent.name    # ==> 'Zorro, A'  (This does refresh the name)

name属性はparent変更されておりchild、同じ親を引き続き参照していますが、親の更新された属性は反映されていません。update_attributes失敗の問題でもありません。Sallyのレコード(child)がデータベースから再度取得されると、属性はの新しい値nameを反映します。parent

ここで何が起こっているのですか?

あなたの洞察に感謝します!

4

1 に答える 1

1

これは、ActiveRecordにオブジェクトマップがないためです。親を変更せずに子オブジェクトを保存しても、親は更新されません。

関連付けを更新するには、のような操作を行いますchild.parent(true).name

于 2010-12-15T21:35:31.007 に答える