6

我有桌子usersscores。以下是关联:

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宝石。

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 回答