Rails 3:仅在发布时更新counter_cache

| 这是一个棘手的问题。 我有一个具有多种内容类型的项目,例如文章,评论等。每种内容类型都有注释,注释是多态的,因为它们可以属于任何内容类型。 我想在所有内容页面上放置一个总评论计数器,以显示有多少评论,我实现了一个计数器缓存。 (类似@ article.comments.count的查询更多,当我使用Ancestry gem进行线程注释时,子注释不计入该数字,仅计入根注释。) 计数器缓存效果很好,并显示了准确的注释数,但与往常一样,只有一点点收获。注释并非总是立即发布,只有注册用户才能立即发布,并且这些注释的状态为\'2 \'。未注册的用户进入审核队列;这些注释的状态为\'1 \'。 问题是,计数器缓存对它们的计数全部相同,因此,如果您有四个评论为审核和一个批准的评论,则总数为5。 有没有一种方法可以将异常添加到计数器缓存中,以告诉它如果comment.status不是\'2 \',则不要递增?同样,在评论资源的后端并设置要发布的评论(状态为2)时,是否有办法(模型,控制器或其他方式)为其关联的多态/内容创建计数器缓存类型增量? comments.rb
 # Comments
 has_many :comments, :as => :commentable, :dependent => :destroy
 accepts_nested_attributes_for :comments
article.rb
belongs_to :commentable, :polymorphic => TRUE, :touch => TRUE, :counter_cache => TRUE 
    
已邀请:
目前我能想到的是,您可能必须在模型中提供自己的计数器缓存列,并根据需要增加/减少。即
active_comments_count
pending_comments_count
然后,在模型中,您可以通过回调触发update_comment_count方法。 它更多是在您方面的努力,但是我确信这种方法会奏效。     

要回复问题请先登录注册