40 votes

Mise en cache des actions Rails avec des paramètres de chaîne de requête

Comment mettre en cache mon contrôleur REST avec Rails où mes actions ont des paramètres de chaîne de requête?

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

THX!

88voto

chrisrbailey Points 1480

Si vous souhaitez mettre en cache une action en fonction de tous les paramètres de requête (ou presque pour tous), vous pouvez effectuer les opérations suivantes:

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

Ou peut-être préférez-vous tous les paramètres que vous utilisez uniquement pour l'analyse (mais qui n'ont aucune incidence sur les enregistrements que vous extrayez):

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

10voto

Alberto F. Capel Points 261

Pour utiliser l'URL de la requête comme clé de cache, je fais quelque chose comme ceci:

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

4voto

KARASZI István Points 15162

Dans ce cas, vous devez utiliser la mise en cache des fragments:

dans votre contrôleur:

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

0voto

chris Points 1

Checkout https://github.com/pennymac/action_param_caching pour une version simplifiée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X