2010-10-13 9 views
6

In einem Statistik-Teil einer Rails App habe ich einige benutzerdefinierte SQL-Aufrufe, die mit ActiveRecord :: Base.execute() aus dem Modellcode aufgerufen werden. Sie geben verschiedene Aggregate zurück.Wie Verwenden von ActiveRecord Query Cache mit benutzerdefiniertem SQL

Einige dieser (identischen) Abfragen werden in einer Schleife im Controller ausgeführt und scheinen nicht vom ActiveRecord-Abfragecache zwischengespeichert zu werden.

Gibt es eine Möglichkeit, benutzerdefinierte SQL-Abfragen in einer einzigen Anfrage zwischenzuspeichern?

Antwort

5

Nicht sicher, ob AR Query-Caching für #execute unterstützt, möchten Sie vielleicht in der Dokumentation nachsehen. Wie auch immer Sie können tun, ist, Auswendiglernen zu verwenden, was bedeutet, dass Sie die Ergebnisse manuell behalten werden, bis die aktuelle Anfrage vorbei ist.

etwas tun, wie dies in Ihrem Modell:

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

dies im Grunde die Abfrage ausführt nur auf das erste Mal und dann die Antwort auf @rs speichern, bis die gesamte Anfrage vorbei ist.

wenn ich nicht falsch bin, Rails 2.x hat bereits ein Makro memoization auf Active benannt, die alle das tut automatisch

hoffe, es hilft

+0

ich @@ class_variables benötigt, aber, anders als das, genau wonach ich gesucht habe. Vielen Dank. –