Je suis sûr que c'est un comportement ordinaire de Rails, et il me manque quelque chose de fondamental, mais qu'est-ce que c'est?Rails: L'enfant ne suit pas les changements dans le parent
Un enfant appartient à un parent, un parent a plusieurs membres.
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)
Bien que l'attribut name
de parent
a été changé, et bien que child
continue de se référer au même parent, il ne reflète pas l'attribut mis à jour du parent. Il ne s'agit pas non plus de l'échec de update_attributes
. Si l'enregistrement de Sally (child
) est à nouveau extrait de la base de données, l'attribut name
reflète la nouvelle valeur de parent
.
Que se passe-t-il ici?
Merci pour votre perspicacité!
Scoop intérieur: Rails 3.1 aura probablement une [carte d'objet] (https://github.com/rails/rails/pull/76). – iain
Merci pour l'info. –