2011-02-22 6 views
16

私のアプリケーションは管理目的でネームスペースを使用しています。私は最近、アクションキャッシングを使用しようとしましたが、expire_actionを使用してキャッシュを期限切れにしようとするといくつかの問題が発生しました。rails caching:別のネームスペースのexpire_action

class NewspostsController < ApplicationController 

    caches_action :index, :layout => false 

    def index 
    @posts = Newspost.includes(:author).order("created_at DESC").limit(5) 
    end 

end 

これは、ビュー/ホスト/ newsposts下のビューをキャッシュします:基本的に私はこのようなアクションのキャッシュを使用して、キャッシュされている私のデフォルトの名前空間newspostsコントローラ内のindexアクションを持っています。

デフォルトの名前空間には、データを変更するためのアクションはありません。これらはすべて、管理者の名前空間にあります。私の管理:: NewspostsControllerで私はこのようなアクションを作成するには、このキャッシュを期限切れにしようとしています:

expire_action(:controller => 'newsposts', :action => 'index') 

しかしこれは、ビュー/ホスト/管理/ newspostsの下にあるキャッシュファイルを期限切れになります。明らかに、管理ネームスペースのim以降にはうまくいかず、レールはこの正当な名前空間のキャッシュを期限切れにしようとしています。残念ながら、名前空間パラメータをaxpire_actionメソッドに渡すことはできません。どうすれば別の名前空間でアクションキャッシュを期限切れにすることができますか?

答えて

40

もう少し掘り下げた後、私は最終的に解決策を見つけました。

特に、先頭のスラッシュは名前空間が仮定されていないことを保証します。したがって、現在のコントローラがそのモジュールの下にある場合、url_for:controller => 'users'はAdmin :: UsersControllerに解決されるかもしれませんが、url_for:controller => '/ users'は何に関係なく:: UsersControllerへのリンクを保証します。

そこで、基本的

expire_action(:controller => '/newsposts', :action => 'index') 

は、デフォルトの名前空間に失効し、管理者の名前空間の

expire_action(:controller => 'admin/newsposts', :action => 'index') 

(デフォルトで)でしょう。あなたがなどXML、JSON、など、特定の形式を期限切れにしたい場合、私は、学んだ

RailsCast

+1

ねえ、ありがとう!それは見つけるのは難しい:) – fuzzyalej

0

1つの追加のノート、あなたが望むだけの

expire_action(:controller => '/newsposts', :action => 'index', :format => 'xml') 

または任意の形式。それは私を理解するために私を見ています。

関連する問題