每当保存 Mongoid 模型时更新缓存的好方法是什么?
What is a good way to update a cache whenever a Mongoid model is saved?
一种方法是向每个模型添加一个 after_save
回调。但是有7个模型,所以把这个功能放在一个地方会更好。
有没有更好的方法?也许通过重新打开 Mongoid::Document 模块?
实际上我认为 after_save
本身不会起作用。可能还需要包括 after_update
和 after_destroy
...?
对此的典型答案是 mongoid-observers。观察者是一个 class,它接收被观察 class 实例的回调,并且可以执行诸如缓存清除之类的事情。
使用它非常简单 - 您只需定义要观察的模型,然后实现回调。例如:
class PostObserver < Mongoid::Observer
observe :post, :gallery
def after_update(record)
clear_cache_for record
end
def after_destroy(record)
clear_cache_for record
end
private
def clear_cache_for(record)
Rails.cache.clear record.cache_key
end
end
一种方法是向每个模型添加一个 after_save
回调。但是有7个模型,所以把这个功能放在一个地方会更好。
有没有更好的方法?也许通过重新打开 Mongoid::Document 模块?
实际上我认为 after_save
本身不会起作用。可能还需要包括 after_update
和 after_destroy
...?
对此的典型答案是 mongoid-observers。观察者是一个 class,它接收被观察 class 实例的回调,并且可以执行诸如缓存清除之类的事情。
使用它非常简单 - 您只需定义要观察的模型,然后实现回调。例如:
class PostObserver < Mongoid::Observer
observe :post, :gallery
def after_update(record)
clear_cache_for record
end
def after_destroy(record)
clear_cache_for record
end
private
def clear_cache_for(record)
Rails.cache.clear record.cache_key
end
end