8

アプリケーションでアクションキャッシュを期限切れにするのに問題があります。

これが私のコントローラーです:

class ToplistsController < ApplicationController
  caches_action :songs, cache_path: :custom_cache_path.to_proc

  def custom_cache_path
    "#{params[:when]}-#{params[:what]}-#{params[:controller]}-#{params[:action]}"
  end

  def songs
    # ...
  end  
end

どういうわけかカスタムキャッシュパスをリセットできるようにする必要がありますが、その方法がわかりません。

私はすでにこのテクニックを使ってみましたが、成功しませんでした。私のキャッシュエンジンであるDalliは正規表現マッチャーをサポートしていないようです。

このコードを使用しようとすると、次のエラーが発生します。

expire_fragment(/songs/)

ActiveSupport::Cache::DalliStore does not support delete_matched

このコード行をデバッグに使用しようとしましたが、無視されています。

before_filter only: [:songs] 
  expire_fragment(custom_cache_path)
end

Rails 3.1.0.rc6、Dalli 1.0.5、Ruby1.9.2を使用しています。

4

2 に答える 2

0

before_filterブロックは、アクションキャッシュへのデュオとして無視されました。
解決策は、代わりにフラグメントキャッシュを使用することです。

# Controller
class ToplistsController < ApplicationController
  helper_method :custom_cache_path

  before_filter only: [:songs]
    if params[:reset_cache]
      expire_fragment(custom_cache_path)
    end
  end

  def custom_cache_path
    "#{params[:when]}-#{params[:what]}-#{params[:controller]}-#{params[:action]}"
  end

  def songs
    # ...
  end  
end

# View

<%= cache custom_cache_path do %>
  Content that should be cached
<% end %>
于 2011-08-31T09:55:27.357 に答える
0

こちらで解決策を確認することもできます。彼のアプローチでは、追加のパラメーターを使用してアクションを期限切れにすることができます。

于 2012-02-06T07:09:46.477 に答える