每当保存 Mongoid 模型时更新缓存的好方法是什么?

What is a good way to update a cache whenever a Mongoid model is saved?

一种方法是向每个模型添加一个 after_save 回调。但是有7个模型,所以把这个功能放在一个地方会更好。

有没有更好的方法?也许通过重新打开 Mongoid::Document 模块?

实际上我认为 after_save 本身不会起作用。可能还需要包括 after_updateafter_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