如何在Rails中获得真正的after_destroy?

glo*_*tho 3 caching model ruby-on-rails callback openurl

我有一个after_destroy模型回调,在模型实例被销毁后重新生成缓存.它通过调用open("http://domain.com/page-to-cache")需要重新缓存的页面来完成此操作.

问题是模型实例此时显然尚未完全销毁,因为那些打开的URL请求仍然注册其存在,并且重新生成的缓存看起来与预破坏缓存完全相同.如何在模型实例被实际销毁之后运行这些调用?

Mik*_*cic 5

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

您可以在此处阅读有关Rails 3 after_commit回调的一些文档.如果你的Rails版本没有钩子,你可以尝试使用这个提供功能的gem.after_commit