2010-10-13 16 views
6

En una parte de las estadísticas de una aplicación Rails, tengo algunas llamadas SQL personalizados que se llaman con ActiveRecord :: Base.execute() desde el código del modelo. Devuelven varios agregados.Cómo usar ActiveRecord caché de consultas con SQL personalizado

Algunas de estas consultas (idénticos) se ejecutan en un bucle en el controlador, y parece que no se almacenan en caché por el caché de consultas de ActiveRecord.

¿Hay alguna manera de almacenar en caché las consultas SQL personalizadas dentro de una única solicitud?

Respuesta

5

No estoy seguro si es compatible con AR almacenamiento en caché de consultas para #execute, es posible que desee profundizar en la documentación. De todos modos lo que puede hacer , es el uso de memorización, lo que significa que usted va a mantener los resultados manualmente hasta que la solicitud actual ha terminado.

hacer algo como esto en su modelo:

def repeating_method_with_execute 
    @rs ||= ActiveRecord::Base.execute(...) 
end 

esto básicamente ejecutar la consulta sólo en el primer tiempo y luego guardar la respuesta a @rs hasta que toda la solicitud ha terminado.

si no estoy equivocado, Rieles 2.x ya tiene una macro llamada memoization en ActiveRecord que hace todo lo que automáticamente

creo que sirve

+0

que necesitaba @@ class_variables, pero, aparte de eso, exactamente lo que estaba buscando Gracias. –

Cuestiones relacionadas