3

我有一个after_destroy模型回调,它在模型实例被销毁后重新生成缓存。它通过调用open("http://domain.com/page-to-cache")需要重新缓存的尽可能多的页面来做到这一点。

问题是此时模型实例显然还没有完全销毁,因为那些打开的 url 请求仍然注册它的存在,并且重新生成的缓存看起来与销毁前的缓存完全一样。在模型实例实际销毁后如何运行这些调用?

4

2 回答 2

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

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

于 2011-05-11T18:52:54.553 回答
0

您可以尝试添加 after_save 回调,例如:

after_save :my_after_save_callback

def my_after_save_callback
  do_something if destroyed?
end
于 2011-05-11T18:39:04.377 回答