次の設定があります。Categoriesというモデル。これらのカテゴリは、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を設定しましたが、機能していることがわかりました。しかし、何らかの理由でキャッシュは期限切れになりません!
しかし、ショーアクションを実行すると(つまり、/ category / 1.jsonに移動すると、手動スイーパーが起動し、正常に動作します)。では、なぜスイーパーは、管理者に変更があったときではなく、呼び出したときにのみ機能するのですか?
よろしくお願いします、-David