Как определить, было ли изменено вложение скрепки в обратном вызове after_save?

Похоже, что 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 после сохранения.

Я могу добавить процессор, но мне нужно выполнить мои действия после сохранения данных модели.

Ответы

Ответ 1

Вы можете попробовать получить доступ к методу _changed? для одного из следующих атрибутов:

if avatar_updated_at_changed?
  # do something
end

Ответ 2

Когда мне нужен доступ к этим данным после сохранения, я обычно беру такой подход:

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