2017-01-18 9 views
1

ブックモデルhas_many評価はoverall属性を持ちます。Rails - 子に基づく親値の平均計算

評価が追加/破棄されるたびにBookmean_rating属性を更新します。

最も簡単な方法は何ですか?

+0

アルゴリズムを使用してください。 – zeantsoi

答えて

1

Ratingモデルのafter_create/after_destroyコールバックを使用するのが最も簡単な方法です(スレッドセーフではありません)。 documentation on model callbacks

スレッドセーフなソリューションが必要な場合は、遅延ジョブなどでmean_ratingを更新する必要があります。 This postは良いスタートになるかもしれません。

2

モデルライフサイクルフック(注目)after_createを利用できます。あなたの評価モデルで

、あなたは後にしてください。評価は、常にブックなどがあり、やって作る

#models/rating.rb 

after_create :update_book_mean_rating 

def update_book_mean_rating 
    new_mean_rating = self.book.ratings.sum(:overall)/self.book.ratings.count 
    self.book.update_attributes(mean_rating: new_mean_rating 
end 

あなたはおそらく検証を追加することをお勧めしますmean_rating /チェックを更新するフックを作成して書くことができます壊れたときに似たようなものがありますが、このようなものは正しい方向に向けるべきです。

関連する問題