2010-01-01 9 views

Respuesta

87

Si desea almacenar en caché una acción, basada en todos los parámetros de consulta (o decir en casi todos ellos), que puede hacer:

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

O, tal vez desea que todos pero algunos parametros que acaba de utilizar para Analítica (pero que no tienen relación con los registros de la que obtienes):

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

Di la acción tiene nombre de usuario John y has almacenan en caché algunas versiones de esta basado en parámetros GET al azar aprobadas en ¿Hay alguna manera de invalidar el caché para la acción con el nombre de usuario john Y todas las versiones en caché con params? Ejemplo/john/picture? Dimension = 50 y/john/picture? Dimension = 100 ¿es posible borrar todas las versiones de la imagen de johns? – Marc

+0

@Marc: Sí, consulte el espacio de nombres para ideas http://code.google.com/p/memcached/wiki/NewProgrammingTricks#Namespacing – randomguy

+0

Esperemos que esto ayude a alguien: en Rails 3- cuando caduca un caché de acción que tiene parámetros personalizados, un formato definido, Y usted ha establecido la URL predeterminada para asegurar una barra inclinada, expire_action (: action =>: my_action,: param_1 => "val",: format =>: json), rails no usa la clave de caché correcta. En lugar de borrar la clave de caché /my_action.json/?param_1=val, borrará /my_action.json/?param_1=val.json debido a la forma en que infiere la extensión. https://github.com/rails/rails/blob/3-2-stable/actionpack/lib/action_controller/caching/actions.rb#L179 – jkelley

3

En este caso se debe utilizar fragmentos de almacenamiento en caché:

en su controlador:

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

Para utilizar la URL de solicitud como clave de caché hago algo como esto:

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