Comment puis-je mettre en cache mon contrôleur REST avec Rails où mes actions ont des paramètres de chaîne de requête?Rails d'action de mise en cache avec des paramètres de chaîne de requête
Example: GET /products/all.xml?max_price=200
Thx!
Comment puis-je mettre en cache mon contrôleur REST avec Rails où mes actions ont des paramètres de chaîne de requête?Rails d'action de mise en cache avec des paramètres de chaîne de requête
Example: GET /products/all.xml?max_price=200
Thx!
Si vous souhaitez mettre en cache une action, en fonction de tous les paramètres de la requête (ou dire sur presque tous), vous pouvez faire:
caches_action :my_action, :cache_path => Proc.new { |c| c.params }
Ou, peut-être que vous voulez tous, mais certains params que vous utilisez juste pour Analytics (mais qui ont aucune incidence sur les dossiers dont vous récupérez):
caches_action :my_action, :cache_path => Proc.new { |c| c.params.delete_if { |k,v| k.starts_with?('utm_') } }
Dans ce cas, vous devez utiliser des fragments de mise en cache:
dans votre contrôleur:
cache(params[:max_price], :expires_in => 10.minute) do
# get the result
end
Pour utiliser l'URL de requête comme la clé de cache que je fais quelque chose comme ceci:
caches_action :index, :cache_path => Proc.new {|c| c.request.url }
Dire l'action a le nom d'utilisateur john et que vous avez mises en cache quelques versions de ce en fonction des paramètres get aléatoires passés dans Y at-il un moyen d'invalider le cache pour l'action avec le nom d'utilisateur john ET toutes les versions en cache avec params? Exemple/john/image? Dimension = 50 et/john/image? Dimension = 100 est-il possible d'effacer toutes les versions de l'image de john? – Marc
@Marc: Oui, voir la liste des idées http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Namespacing – randomguy
Espérons que cela aide quelqu'un: Dans Rails 3- lors de l'expiration d'un cache d'actions avec des paramètres personnalisés, un format défini, ET vous avez défini l'URL par défaut pour assurer une barre oblique, expire_action (: action =>: mon_action,: param_1 => "val",: format =>: json), rails n'utilise pas la bonne clé de cache. Au lieu d'effacer la clé de cache /my_action.json/?param_1=val, elle effacera /my_action.json/?param_1=val.json en raison de la façon dont elle déduit l'extension. https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/caching/actions.rb#L179 – jkelley