ブックモデルhas_many
評価はoverall
属性を持ちます。Rails - 子に基づく親値の平均計算
評価が追加/破棄されるたびにBook
のmean_rating
属性を更新します。
最も簡単な方法は何ですか?
ブックモデルhas_many
評価はoverall
属性を持ちます。Rails - 子に基づく親値の平均計算
評価が追加/破棄されるたびにBook
のmean_rating
属性を更新します。
最も簡単な方法は何ですか?
Rating
モデルのafter_create/after_destroy
コールバックを使用するのが最も簡単な方法です(スレッドセーフではありません)。 documentation on model callbacks
スレッドセーフなソリューションが必要な場合は、遅延ジョブなどでmean_rating
を更新する必要があります。 This postは良いスタートになるかもしれません。
モデルライフサイクルフック(注目)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 /チェックを更新するフックを作成して書くことができます壊れたときに似たようなものがありますが、このようなものは正しい方向に向けるべきです。
アルゴリズムを使用してください。 – zeantsoi