0 votes

Comment définir la valeur d'un nouveau cache de compteur ActiveRecord ajouté ?

J'ai un objet modèle qui n'avait pas de mise en cache de compteur dessus avant et je l'ai ajouté via une migration. Le problème est que j'ai essayé et échoué à définir la valeur de départ de la mise en cache du compteur en fonction du nombre d'objets enfants que j'avais déjà dans la migration. Toute tentative de mise à jour de la valeur de la mise en cache n'a pas été écrite dans la base de données. J'ai même essayé de le faire à partir de la console mais cela ne s'est jamais produit. Toute tentative d'écrire directement sur cette valeur sur le parent a été ignorée.

Changer le nombre d'enfants mettait à jour la mise en cache du compteur (comme il se doit), et en retirant ":counter_cache => true" de l'enfant, cela me permettait de mettre à jour la valeur sur le parent. Mais c'est tricher. Je devais être en mesure d'ajouter la mise en cache du compteur et ensuite définir sa valeur de départ sur le nombre d'enfants dans la migration afin de pouvoir commencer avec les valeurs correctes pour les pages qui les afficheraient.

Quelle est la bonne manière de faire cela pour que ActiveRecord ne me remplace pas ?

2voto

James Avery Points 2538

Vous voulez utiliser la méthode update_counters, ce billet de blog a plus de détails :

http://josh.the-owens.com/archives/2007/11/03/rails-edge-change-how-to-add-a-counter-cache-to-an-existing-db-table/

Ce RailsCasts sur le sujet est également une bonne ressource :

http://railscasts.com/episodes/23-counter-cache-column

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X