web-dev-qa-db-ja.com

Railsクエリ文字列パラメータを使用したアクションキャッシュ

アクションにクエリ文字列パラメーターがある場合、RESTコントローラーをRailsでキャッシュするにはどうすればよいですか?

Example: GET /products/all.xml?max_price=200

どうも!

40
xpepermint

すべてのクエリパラメータに基づいて(またはほぼすべてのパラメータに基づいて)アクションをキャッシュする場合は、次の操作を実行できます。

caches_action :my_action, :cache_path => Proc.new { |c| c.params }

または、Analyticsに使用するいくつかのパラメーターを除くすべてが必要な場合もあります(ただし、フェッチするレコードには関係ありません)。

caches_action :my_action, :cache_path => Proc.new { |c| c.params.delete_if { |k,v| k.starts_with?('utm_') } }
89
chrisrbailey

リクエストURLをキャッシュキーとして使用するには、次のようにします。

caches_action :index, :cache_path => Proc.new {|c| c.request.url }
10

この場合、フラグメントキャッシュを使用する必要があります。

コントローラ内:

cache(params[:max_price], :expires_in => 10.minute) do
  # get the result
end
4
KARASZI István