Если у вас нет очень простого приложения на Rails, я бы рекомендовал использовать фрагментное кэширование, поскольку его гораздо проще использовать и поддерживать по сравнению с кэшированием действий / страниц. Если вы решите использовать фрагментное кэширование, вы можете добавить что-то вроде следующего в ваш индексный шаблон:
<% @models.each do |model| %>
<% cache ["v1", model] do %>
<%= render model %>
<% end %>
<% end %>
Это сделает частичное _model.html.erb
и кеширует результат. Для получения подробной информации о механизмах кэширования в Rails я предлагаю прочитать Руководства по Rails .
Более агрессивной стратегией кэширования было бы кэширование всех моделей на одной странице. Это можно сделать, установив для текущей страницы переменную экземпляра в контроллере:
def index
@page = params[:page]
@models = ...
end
Теперь в своем шаблоне вы можете включить страницу в ключ составного кэша:
<% cache ["v1", cache_key_for(@models), @page] do %>
<% @models.each do |model| %>
<%= render model %>
<% end %>
<% end %>
<% end %>
cache_key_for
- это помощник, который вычисляет ключ кэша для набора моделей. Это может быть определено как:
def cache_key_for(models)
"#{models.count}-{models.map(&:updated_at).max.utc.to_s(:number)}"
end