我有一个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 自己的回调系统有关。
答案 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
用于创建和更新,并验证附件是否在销毁时被清除。