我有以下设置:一个名为类别的模型。这些类别使用 ActiveAdmin 进行管理。我想使用页面缓存来缓存类别。
这就是我设置 app/admin/categories.rb 的方式
ActiveAdmin.register Category do
controller do
cache_sweeper :category_sweeper
end
end
这是我的扫地机:
class CategorySweeper < ActionController::Caching::Sweeper
observe Category
def after_save(category)
expire_cache(category)
end
def after_destroy(category)
expire_cache(category)
end
def expire_cache(category)
expire_page :controller => 'categories', :action => 'index', :format => 'json'
end
end
这是我的控制器:
class CategoriesController < ApplicationController
caches_page :index
cache_sweeper :category_sweeper
respond_to :json
def index
@categories = Category.all
respond_with(@categories)
end
def show
CategorySweeper.instance.expire_cache(@category)
respond_with('manually sweeped!')
end
end
所以这个想法是当活动管理员发生变化时,应该调用清扫器。我设置了 debug.log 并证明它正在工作。但由于某种原因,缓存不会过期!
但是,如果我执行显示操作(即转到 /categories/1.json,那么我的手动清扫器就会启动并且它工作正常)。那么为什么清扫器只在我调用它时才起作用,而不是在管理员发生变化时起作用呢?
在此先感谢,-大卫