2010-10-13 12 views
6

In una parte delle statistiche di un'app Rails, ho alcune chiamate SQL personalizzate che vengono chiamate con ActiveRecord :: Base.execute() dal codice del modello. Restituiscono vari aggregati.Come utilizzare ActiveRecord Query Cache con SQL personalizzato

Alcune di queste query (identiche) vengono eseguite in un ciclo nel controller e sembra che non siano memorizzate nella cache dalla cache delle query di ActiveRecord.

C'è un modo per memorizzare query SQL personalizzate all'interno di una singola richiesta?

risposta

5

Non sono sicuro che se AR supporta il caching delle query per #execute, è possibile che si desideri esaminare la documentazione. In ogni caso, è possibile utilizzare la memorizzazione , il che significa che manterrai i risultati manualmente finché la richiesta corrente non sarà terminata.

fare qualcosa di simile nel modello:

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

questo sarà essenzialmente eseguire la query solo la prima volta e quindi salvare la risposta alla @rs fino a quando l'intera richiesta è finita.

se non sbaglio, Rails 2.x ha già una macro denominata memoization su ActiveRecord che fa tutto quello che automaticamente

Speranza che aiuta

+0

avevo bisogno @@ class_variables, ma, a parte questo, esattamente quello che stavo cercando. Grazie. –

Problemi correlati