Можно ли кешировать пользовательские sql запросы в Rails?

В home_controller моего приложения на Rails 4 я выполняю собственный SQL-запрос и сохраняю результаты в переменной экземпляра.

@studentscoring = ActiveRecord::Base.connection.execute sql_string_student

Я тогда, после установки кеширования на true в разработке конфигаconfig.action_controller.perform_caching = true и перезапустите приложение, настройте кэширование вокруг соответствующей переменной в представлении.

  
    
    
      
        

      
      ...... #code ommitted
    

    
    

Обновление браузера три раза показывает, что запрос выполняется три раза, и последний запуск запроса на самом деле занимает на 0,7 мс дольше, чем первый, поэтому я 'Я предполагаю, что кэширование не работает, или яя не делаю это правильно :). Можете ли вы сказать мне, что яя делаю неправильно?

Не будучи экспертом по каким-либо стандартам, я нене понимаю, как кеширование может быть запущено из представления с помощью <% cache ... do%> синтаксис, так как к тому времени, когда представление загружает гаваньt запросы контроллера уже были выполнены, поэтому он 'не слишком ли поздно сказать Rails использовать кэшированную копию?

с логов сервера ...

Первый

 (1.1ms)  with cte_scoring as (
 select
 users.id, users.name, users.email,
 (select Coalesce(sum(value),0) from answer_votes where (answer_votes.user_id = users.id) AND (created_at >= Current_Date - interval '7 day')) +
 (select Coalesce(sum(value),0) from best_answers where (best_answers.user_id = users.id) AND (created_at >= Current_Date - interval '7 day')) +
 (select Coalesce(sum(value),0) from contributions where (contributions.user_id = users.id) AND (created_at >= Current_Date - interval '7 day')) total_score
 from
 users
 where
 users.student = 'true') 

select id,
 name,
 email,
 total_score
from cte_scoring
order by total_score desc
limit 5 

третий

  (1.8ms)  with cte_scoring as (
 select
 users.id, users.name, users.email,
 (select Coalesce(sum(value),0) from answer_votes where (answer_votes.user_id = users.id) AND (created_at >= Current_Date - interval '7 day')) +
 (select Coalesce(sum(value),0) from best_answers where (best_answers.user_id = users.id) AND (created_at >= Current_Date - interval '7 day')) +
 (select Coalesce(sum(value),0) from contributions where (contributions.user_id = users.id) AND (created_at >= Current_Date - interval '7 day')) total_score
 from
 users
 where
 users.student = 'true') 

select id,
 name,
 email,
 total_score
from cte_scoring
order by total_score desc
limit 5 

Обновить

Журналы показывают, что он читает фрагмент (после выполнения вышеупомянутых запросов), так почему запросы будут иметь разное время, а более поздний запрос будет медленнее? Я бы подумал, что запросы не будутне запускается вообще, если есть фрагмент для чтения.

Read fragment views/id/75/name/Retarded Student/email/[email protected]/total_score/0/id/83/name/Jim Beam/email/[email protected]/total_score/0/id/79/name/Weird Student/email/[email protected]/total_score/0/id/80/name/VegetableSTudent/email/[email protected]/total_score/0/c9638e467bfd0fbf5b619ab411182256 (0.3ms)

Ответы на вопрос(2)

Ваш ответ на вопрос