2010-01-01 62 views

回答

87

(或幾乎所有的人說:

在控制器

),你可以這樣做:

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

或者,也許你想所有,但一些你只需要使用的分析(但對您要提取的記錄)無軸承PARAMS:

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

說出動作的用戶名是約翰,你已經基於在通過隨機GET參數緩存的這幾個版本。有沒有辦法使用用戶名john和所有緩存版本的參數來禁用緩存?示例/ john/picture?dimension = 50和/ john/picture?dimension = 100是否可以清除johns圖片的所有版本? – Marc 2011-11-04 20:49:46

+0

@Marc:是的,請參閱命名空間的想法http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Namespacing – randomguy 2012-01-26 16:52:45

+0

希望這可以幫助某人:在Rails 3中,當過期的自定義參數的動作緩存時,格式已定義,並且您已設置默認URL以確保結尾的斜槓,expire_action(:action => my_action,:param_1 =>「val」,:format =>:json),rails不使用正確的緩存鍵。由於其推斷擴展的方式,它將清除/my_action.json/?param_1=val.json而不是清除緩存鍵/my_action.json/?param_1=val。 https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/caching/actions.rb#L179 – jkelley 2014-10-03 19:33:27

3

在這種情況下,你應該使用片段緩存:如果你希望緩存一個動作的基礎上,所有的查詢參數

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

要使用請求的URL作爲緩存鍵我做這樣的事情:

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