我有一个包含两种不同模型的应用程序,即评论(Comments)和回复(Replies),每个模型都可以被赞同或反对。因此,我创建了一个多态模型称为 Emotion。以下是这些模型的代码:
class Comment < ActiveRecord::Base
belongs_to :user
has_many :replies
has_many :emotions, :as => :emotionable
end
class Reply < ActiveRecord::Base
belongs_to :user
belongs_to :comment
has_many :emotions, :as => :emotionable
end
class Emotion < ActiveRecord::Base
belongs_to :emotionable, :polymorphic => :true
end
这一切都很好,但我需要为评论和回复添加计数器缓存,以便获取每个对象的Agrees和Disagree的大小。在所有文档中,都有使用普通多态关联进行计数器缓存的示例,而不是带有额外条件的关联。Emotion的模式如下:
create_table "emotions", :force => true do |t|
t.integer "user_id"
t.string "emotion"
t.integer "emotionable_id"
t.string "emotionable_type"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
简而言之,我需要能够通过计数器缓存在多态关联上调用@comment.agrees_count、@comment.disagrees_count、@reply.agrees_count和@reply.disagrees_count。因此,评论和回复将需要2个计数器缓存。
counter_cache: :noteable_count
。 - Yshmarov