我之前在我的应用中设置了一些counter_caches,但仅限于简单的belongs_to关系。
我做了很多像
这样的查询user.collections.got.count
其中got是我的收藏模型中的范围
belongs_to :user
scope :got, -> { where(status: 'Got') }
我可以设置一个counter_cache来计算标记为"得到"?的user.collections的数量。 我看到的问题是counter_cache只更新为create或destroy但不更新动作。有一个很好的方法吗?
答案 0 :(得分:2)
您可以将After_save回调添加到Collection类,并自行执行计数器缓存操作。
class Collection < ActiveRecord::Base
belongs_to :user
after_save :update_got_counter
def update_got_counter
if changed_attributes.has_key?('status')
# do the cache manipulation here
User.increment_counter(:collections_get_count, user.id)
or
User.decrement_counter(:collections_get_count, user.id)
end
end
end