Rails:子记录不跟踪父级的变化

时间:2010-12-15 21:29:45

标签: ruby-on-rails activerecord associations model-associations

我确信这是普通的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的{​​{1}}属性已更改,虽然parent继续引用同一父级,但它不会反映父级的更新属性。这也不是child失败的问题。如果再次从数据库中检索到Sally的记录(update_attributes),child属性将反映name的新值。

这里发生了什么?

感谢您的见解!

1 个答案:

答案 0 :(得分:1)

这是由于ActiveRecord中缺少对象映射。保存子对象而不修改父对象将不会刷新父对象。

要刷新关联,请执行child.parent(true).name

之类的操作