:counter_cache => true表示存储和
我有表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
。 是否有类似的方法来存储表scores
中所有值的总和? 或者我必须自己实施这项任务?
不,你必须自己实施。 反缓存仅用于存储关联记录的数量。 您可以使用Score
上的回调来实现它,以更新关联的User
。 另请参见如何在rails中缓存计算列?
此外,除非您每次都要求出明显的性能问题,否则请避免使用这样的缓存。 这只是容易出错并且过时的东西。 如果你真的不需要它,那就不值得了。
你可以使用counter_culture gem。
class Score < ActiveRecord::Base belongs_to :user counter_culture :user, column_name: 'scores_sum', delta_column: 'score_value' end