will_paginate проблема с действием и фрагментным кэшированием - PullRequest
0 голосов
/ 05 января 2011

я добавил кэширование действий в мою index часть и перечислил 9 записей на странице

will_paginate отошел от работы и отрисовывает один и тот же набор записей снова и снова.

и та же проблема с кэшированием фрагмента

, пожалуйста, предложите какое-то решение для этого ..

спасибо

Ответы [ 2 ]

2 голосов
/ 05 января 2011
0 голосов
/ 15 июня 2012

Если у вас нет очень простого приложения на 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...