条件计数器缓存依赖于Paperclip

时间:2015-10-23 12:53:26

标签: ruby-on-rails paperclip counter-cache

我有一个counter_culture计数器,取决于是否定义了Paperclip附件:

class Post < ::ActiveRecord::Base
  belongs_to :user

  counter_culture :user, column_name: Proc.new { |p| p.media? ? 'posts_with_photo_count' : nil }
end

问题是,当帖子更新销毁时,计数器不会更新。

我想它应该与 Paperclip 自己的回调系统有关。

1 个答案:

答案 0 :(得分:0)

我猜到了发生了什么。事实上,由于 counter_culture Paperclip 的回调流量不匹配。

由于在after_update上,当计数器条件执行时,尚未处理附件,p.media?返回false并且计数器不会递增。

类似的事情发生在after_destroy上,因为附件在before_destroy上被销毁。

我为此问题提出了以下解决方案:

counter_culture :user, column_name: Proc.new { |p| (p.photo_file_name? || !p.photo_file_name_was.nil?)  ? 'posts_with_photo_count' : nil }

它基本上认为_file_name用于创建和更新,并验证附件是否在销毁时被清除。