:counter_cache =>存储总和是真的

时间:2012-06-13 16:26:33

标签: ruby-on-rails counter-cache

我有表usersscores。 以下是协会:

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

表格users的列名为scores_count。在此列中,我将所有值的总和存储在表scores中。

我想用这种方式存储scores_count: :counter_cache => true列中所有scores的总和

但是:counter_cache => true只保存表scores中的行数。是否有类似的方法来存储表scores中所有值的总和?或者我必须自己实施这项任务?

2 个答案:

答案 0 :(得分:9)

您可以使用counter_culture gem。

class Score < ActiveRecord::Base
  belongs_to :user
  counter_culture :user, column_name: 'scores_sum', delta_column: 'score_value'
end

答案 1 :(得分:5)

没有。你必须自己实现它。反缓存仅用于存储关联记录的数量。您可以使用Score上的回调来实现它,以更新关联的User。另请参阅How can I cache a calculated column in rails?

此外,除非每次总结都有明显的性能问题,否则请避免使用这样的缓存。这只是容易出错并且过时的东西。如果你真的不需要它,那就不值得了。