Как определить, было ли изменено вложение скрепки в обратном вызове after_save? - PullRequest
14 голосов
/ 27 января 2012

Похоже, что 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 ]

28 голосов
/ 27 января 2012

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

if avatar_updated_at_changed?
  # do something
end
3 голосов
/ 16 августа 2012

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

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
...