Rails action caching z parametrami querystring

Jak mogę buforować mój kontroler REST za pomocą Rails, gdzie moje akcje mają parametry ciągu zapytań?

Example: GET /products/all.xml?max_price=200
Thx!
Author: xpepermint, 2010-01-01

3 answers

Jeśli chcesz buforować akcję na podstawie wszystkich parametrów zapytania (lub powiedzmy na prawie wszystkich), możesz zrobić:

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

Lub, może chcesz wszystkie oprócz niektórych paramów, które po prostu używasz do analizy (ale które nie mają wpływu na rekordy, które pobierasz):

caches_action :my_action, :cache_path => Proc.new { |c| c.params.delete_if { |k,v| k.starts_with?('utm_') } }
 88
Author: chrisrbailey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-24 21:40:38

Aby użyć adresu URL żądania jako klucza cache robię coś takiego:

caches_action :index, :cache_path => Proc.new {|c| c.request.url }
 10
Author: Alberto F. Capel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-02-20 02:00:08

W tym przypadku należy użyć buforowania fragmentów:

W Twoim kontrolerze:

cache(params[:max_price], :expires_in => 10.minute) do
  # get the result
end
 4
Author: KARASZI István,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-01 15:27:39