我有一个after_destroy
模型回调,它在模型实例被销毁后重新生成缓存。它通过调用open("http://domain.com/page-to-cache")
需要重新缓存的尽可能多的页面来做到这一点。
问题是此时模型实例显然还没有完全销毁,因为那些打开的 url 请求仍然注册它的存在,并且重新生成的缓存看起来与销毁前的缓存完全一样。在模型实例实际销毁后如何运行这些调用?
我有一个after_destroy
模型回调,它在模型实例被销毁后重新生成缓存。它通过调用open("http://domain.com/page-to-cache")
需要重新缓存的尽可能多的页面来做到这一点。
问题是此时模型实例显然还没有完全销毁,因为那些打开的 url 请求仍然注册它的存在,并且重新生成的缓存看起来与销毁前的缓存完全一样。在模型实例实际销毁后如何运行这些调用?
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
您可以尝试添加 after_save 回调,例如:
after_save :my_after_save_callback
def my_after_save_callback
do_something if destroyed?
end