2009-06-22 8 views
0

J'ai deux modèles générés par échafaudage: Book et Bookbag. Un Bookbag a beaucoup de livres et un livre appartient à un Bookbag. Chaque Livre a un poids, et chaque Bookbag a un poids moyen qui est censé stocker le poids moyen de tous ses Livres. Quelle est la meilleure façon de maintenir à jour le poids moyen? Utiliser un filtre de pré-enregistrement sur Bookbag ne fonctionne pas car il n'est pas appelé à chaque mise à jour d'un livre qu'il contient, et je ne veux pas mettre à jour le poids moyen à chaque mise à jour du livre, uniquement lorsque le poids d'un livre changements.Mettre à jour le parent Modèle sur la mise à jour de l'enfant

Répondre

0

Il y a une autre solution, si vous pouvez vous permettre de recalculer la moyenne au besoin.

class Bookbag < ActiveRecord::Base 
    has_many :books 

    def weight_average 
    self.books.average(:weight) 
    end 
end 

Vous n'avez pas besoin callbacks dans ce cas, et vous tirer parti de la capacité de votre base de données pour effectuer des calculs.

3

Une solution rapide pourrait être quelque chose le long de ces lignes:

class Book 
    def before_save 
    self.bookbag.update_avg if self.weight_changed? 
    end 
end 
Questions connexes