2011-01-05 2 views
0

я добавил кэширование действий к моему индексу части и листингом 9 записей на страницеwill_paginate проблемы с кэшированием действий и фрагмента

will_paginate работы доцента, и делаю то же набор recors снова и снова.

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

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

благодаря

ответ

0

Если у вас есть очень простое приложение Rails, Я бы рекомендовал использовать кеширование фрагментов, поскольку он намного проще в использовании и обслуживании по сравнению с кешированием действий/страниц. Если вы решите использовать кэширование фрагментов, вы можете добавить что-то вроде следующего в шаблон индекса:

<% @models.each do |model| %> 
    <% cache ["v1", model] do %> 
    <%= render model %> 
    <% end %> 
<% end %> 

Это будет оказывать частичную _model.html.erb и кэшировать результат. Подробнее о механизмах кэширования в Rails я предлагаю прочитать Rails Guides.

Более агрессивной стратегией кэширования было бы кэширование всех моделей на одной странице. Это может быть сделано путем установки текущей страницы в переменный экземпляре в контроллере:

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