2013-04-29 15 views
5

私のRailsプロジェクトでキャッシュを使用していて、特定のURLのキャッシュを期限切れにしたいとします。私は、URLに対応するフラグメントを期限切れにするには、次のコマンドを持って渡さ:Railsはモデルからフラグメントキャッシュを期限切れにします

ActionController::Base.new.expire_fragment("localhost:3000/users/55-testing-devise/boards/") 

を、それが実行されますように追加されたテキストフィールドにURLとすぐに私のRailsプロジェクトにこのコードを配置する場所を、私は混乱していますし、期限切れボタンがクリックされます。

答えて

3

ActionController::Caching::Sweeperは、これを行ううえで便利な方法です.Railsオブザーバの一部です。

http://api.rubyonrails.org/classes/ActionController/Caching/Sweeping.html

class MyModelSweeper < ActionController::Caching::Sweeper 
    observe MyModel 

    def after_save(object) 
    expire_fragment('...') 
    end 
end 
+0

私はモデルでオブザーバをたくありません。私はすでに私のプロジェクトで掃除機を実装しています。しかし、これは完全なcaheをクリアせずにurlの場合、キャッシュを期限切れにしたいとき。ヘルパーは正しい場所ですか? –

7

あなたはおそらく異なるアプローチを検討すべきです。モデルはキャッシュがどのように機能するかに関わるべきではなく、伝統的にスイーパー全体のアプローチは複雑で扱いにくく、他のコードとは同期しない傾向があります。

基本的にフラグメントを手動で期限切れにする必要はありません。代わりに、モデルが更新されると(新しいバージョンの新しいキャッシュエントリを持つように)、キャッシュキー/ URLを変更します。

最近の一般的な知恵はRussian Doll Cachingアプローチを使用することです。このリンクは、基礎と今後のRails 4 will contain even better supportを説明する記事にリンクしています。

これはおそらく、大部分の標準Railsアプリケーションを実行するための最良の方法です。

関連する問題