Как стать правдой after_destroy в Rails? - PullRequest
3 голосов
/ 11 мая 2011

У меня есть обратный вызов модели after_destroy, который восстанавливает кэш после уничтожения экземпляра модели. Это делается путем вызова open("http://domain.com/page-to-cache") для столько страниц, сколько необходимо повторно кэшировать.

Проблема в том, что экземпляр модели, по-видимому, еще не полностью уничтожен в настоящее время, поскольку эти открытые URL-запросы все еще регистрируют его присутствие, и восстановленный кэш выглядит точно так же, как кэш предварительного уничтожения. Как я могу выполнить эти вызовы после того, как экземпляр модели был фактически уничтожен?

Ответы [ 2 ]

5 голосов
/ 11 мая 2011

Вы можете использовать обратный вызов after_commit, чтобы сделать что-то после того, как вся транзакция прошла через базу данных.Это отличается в зависимости от используемой вами версии Rails (2.3.x против 3.xx), но по сути это что-то вроде следующего:

# model_observer.rb
class ModelObserver < ActiveRecord::Observer
  def after_commit(instance)
    do_something if instance.destroyed?
  end
end

Вы можете прочитать некоторую документацию по Rails 3 after_commit обратный вызов здесь .Если ваша версия Rails не имеет хука after_commit, вы можете попробовать использовать этот гем , который обеспечит функциональность.

0 голосов
/ 11 мая 2011

Вы можете попробовать добавить обратный вызов after_save, например:

after_save :my_after_save_callback

def my_after_save_callback
  do_something if destroyed?
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...