2

次の設定があります。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

4

1 に答える 1

2

ActiveAdmin別の名前空間にあるコントローラーについては、このSOの質問を参照してください。

まもなく:

キャッシュの有効期限URLコードにスラッシュを追加します。

def expire_cache(category)
  expire_page :controller => '/categories', :action => 'index', :format => 'json'
end
于 2012-05-05T21:25:57.420 に答える