我有表users
和scores
。
以下是协会:
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
中所有值的总和?或者我必须自己实施这项任务?
答案 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?
此外,除非每次总结都有明显的性能问题,否则请避免使用这样的缓存。这只是容易出错并且过时的东西。如果你真的不需要它,那就不值得了。