如何检测after_save回调中是否更改了回形针附件?

时间:2012-01-27 04:31:16

标签: ruby-on-rails paperclip

看起来像Paperclip不尊重ActiveRecord脏模型。如何检测after_save回调中的更改。

class User

  has_attachment :avatar    
  after_save :do_something

  def do_something
    if name_changed?
      #
    end

    # How to determine avatar was changed?
    #if avatar_changed?
    #  #
    #end

  end
end

注意

我知道我可以使用before_save调用检测avatar.dirty?回调中的更改,但保存后dirty标志设置为false。

我可以添加处理器,但是我需要在保存模型数据后执行我的操作。

2 个答案:

答案 0 :(得分:28)

您可以尝试访问其中一个属性的_changed?方法:

if avatar_updated_at_changed?
  # do something
end

答案 1 :(得分:3)

当我需要在保存后访问此数据时,我通常采用这种方法:

class Foo

  has_attachment :avatar
  before_save :check_for_avatar_changes
  after_save :do_something

  def do_something
    if @avatar_has_changes
      #
    end
  end

  def check_for_avatar_changes
    @avatar_has_changes = self.avatar.dirty?
  end

end