Как использовать ActiveRecord Query Cache с Custom SQL
В части статистики приложения Rails у меня есть несколько пользовательских вызовов SQL, которые вызываются с помощью ActiveRecord::Base.execute() из кода модели. Они возвращают различные агрегаты.
Некоторые из этих (идентичных) запросов выполняются в контроллере в цикле, и кажется, что они не кэшируются в кеше запросов ActiveRecord.
Есть ли способ кэшировать пользовательские запросы SQL в рамках одного запроса?
1 ответ
Не уверен, что AR поддерживает кэширование запросов для #execute, возможно, вы захотите покопаться в документации. В любом случае, вы можете использовать запоминание, что означает, что вы будете сохранять результаты вручную, пока не закончится текущий запрос.
сделать что-то подобное в вашей модели:
def repeating_method_with_execute
@rs ||= ActiveRecord::Base.execute(...)
end
это в основном будет выполнять запрос только в первый раз, а затем сохранить ответ на @rs
пока весь запрос не закончится.
если я не ошибаюсь, в Rails 2.x уже есть макрос с именем memoization
на ActiveRecord, который делает все это автоматически
Надеюсь, поможет