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

Har*_*tty 14 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
Run Code Online (Sandbox Code Playgroud)

注意

我知道我可以before_save通过avatar.dirty?调用检测回调的变化,但dirty保存后该标志设置为false.

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

Dyl*_*kow 28

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

if avatar_updated_at_changed?
  # do something
end
Run Code Online (Sandbox Code Playgroud)

  • 你有没有想出更好的解决方案? (2认同)

小智 5

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

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
Run Code Online (Sandbox Code Playgroud)