Как использовать 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, который делает все это автоматически

Надеюсь, поможет

Другие вопросы по тегам