2011-01-05 5 views
0

Ich habe Aktion Caching meinen Index Teil und Listing 9 Einträge auf einer Seitewill_paginate Problem mit Action und Fragment-Caching

will_paginate dosent Arbeit aufgenommen und macht denselben Satz von Recors wieder und wieder.

und gleiche Problem mit Fragment Caching

bitte eine Lösung dafür vorschlagen ..

dank

Antwort

0

Sofern Sie eine sehr einfache Rails-Anwendung haben, Ich würde empfehlen, das Fragment-Caching zu verwenden, da es im Vergleich zur Aktion/Seiten-Caching viel einfacher zu verwenden und zu warten ist. Wenn Sie verwenden Fragment Caching entscheiden, könnten Sie so etwas wie die folgenden zu Ihrem Index-Template hinzu:

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

Dies wird die partielle _model.html.erb machen und das Ergebnis zwischenspeichern. Für Details zu den Cache-Mechanismen in Rails empfehle ich, Rails Guides zu lesen.

Eine aggressivere Cache-Strategie wäre es, alle Modelle auf einer einzigen Seite zwischenzuspeichern. Das könnte durch Einstellen der aktuellen Seite zu einer Instanzvariablen in der Steuerung erfolgen:

def index 
    @page = params[:page] 
    @models = ... 
end 

Jetzt in Ihrer Vorlage Sie die Seite im Verbund Cache Schlüssel können sein:

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

<% end %> 

cache_key_for ist ein Helfer Das berechnet einen Cache-Schlüssel für eine Reihe von Modellen. Es könnte wie folgt definiert werden:

def cache_key_for(models) 
    "#{models.count}-{models.map(&:updated_at).max.utc.to_s(:number)}" 
end