Rails: 使用自定义查询关联的 counter_cache

3

我有一个像这样的模型:

class Vote
  belongs_to :content, counter_cache: true
end

class Content
  has_many :votes
  has_many :votes_up, -> { where(positive: true) }, class_name: 'Vote'
  has_many :votes_down, -> { where(positive: false) }, class_name: 'Vote'
end

如果我创建了一个正确的迁移,当我执行mycontent.votes_count时,它不会进行查询。
但是对于mycontent.votes_up.countmycontent.votes_down.count呢?我能以同样(简单)的方式缓存它们吗?
1个回答

1

我不知道有没有现成的Rails解决方案,所以我认为需要一些自定义代码。这应该非常简单,只涉及向Vote添加一些回调和向Content添加两个缓存列。您可以在这里查看可用的回调:http://api.rubyonrails.org/classes/ActiveRecord/Callbacks.html

我认为向Vote添加after_saveafter_destroy就可以解决问题。

您还可以查看这个gem:https://github.com/magnusvk/counter_culture ,它可能会有帮助。

但基本上,您只需向Vote添加一些回调并自己增加/减少两个自定义计数器即可。


计数器文化非常适合这个!谢谢 - ProGM
@ProGM,你能告诉我你是如何使用counter_culture gem解决这个问题的吗? - Kartikey Tanna

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接