6

私はテーブルusersとを持っていますscores。協会は次のとおりです。

belongs_to :user #score model
has_many :scores #user model

テーブルusersには という列がありますscores_count。この列には、テーブル内のすべての値の合計を格納しますscores

scores列にすべての合計を格納するためにこの方法を使用したかったscores_count: :counter_cache => true

ただし:counter_cache => true、テーブルの行数のみを保存しますscores。テーブルのすべての値の合計を格納する同様の方法はありますscoresか? または、このタスクは自分で実装する必要がありますか?

4

2 に答える 2

10

counter_culture gemを使用できます。

class Score < ActiveRecord::Base
  belongs_to :user
  counter_culture :user, column_name: 'scores_sum', delta_column: 'score_value'
end
于 2015-03-03T11:25:15.793 に答える
5

いいえ。自分で実装する必要があります。カウンターキャッシュは、関連付けられたレコードの数のみを格納するためのものです。コールバックを使用して実装しScore、関連するを更新できますUser計算列をRailsにキャッシュするにはどうすればよいですか?も参照してください。

さらに、毎回の合計で顕著なパフォーマンスの問題が発生しない限り、このようなキャッシュの使用は避けてください。これは、簡単に失敗して古くなる可能性があるものです。あなたが本当にそれを必要としないならば、それはトラブルの価値がありません。

于 2012-06-13T16:39:19.033 に答える