Как использовать ActiveRecord Query Cache с Custom SQL - PullRequest
6 голосов
/ 14 октября 2010

В части статистики приложения Rails у меня есть несколько пользовательских вызовов SQL, которые вызываются с помощью ActiveRecord :: Base.execute () из кода модели.Они возвращают различные агрегаты.

Некоторые из этих (идентичных) запросов выполняются в цикле в контроллере, и кажется, что они не кэшируются кэшем запросов ActiveRecord.

Любой способ кэширования пользовательских запросов SQL в рамках одного запроса?

1 Ответ

5 голосов
/ 14 октября 2010

Не уверен, что AR поддерживает кэширование запросов для #execute, возможно, вы захотите покопаться в документации. В любом случае, что вы можете сделать, это использовать запоминание, что означает, что вы будете сохранять результаты вручную, пока не закончится текущий запрос.

сделать что-то подобное в вашей модели:

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

это в основном будет запускать запрос только в первый раз, а затем сохранять ответ в @rs, пока весь запрос не закончится.

если я не ошибаюсь, в Rails 2.x уже есть макрос с именем memoization в ActiveRecord, который делает все это автоматически

надеюсь, что это поможет

...