2012-04-04 5 views
0

Wie kann ich Caching bei Ausnahme verhindern? Ich habe diese Aktion:Verhindern des Zwischenspeicherns bei Ausnahme in Ruby on Rails

caches_page :index 
... 
def index 
    if params[:city] 
    city = City.find(params[:city]) 
    @shows = city.shows 
    else 
    @shows = Show.all 
    end 
... 

Wenn Fund mit ActionRecord abgestürzt :: RecordNotFound nichts im Cache - es ist ok. Aber ich möchte diese Ausnahme auch nicht in meiner Protokolldatei. Aber wenn ich:

begin 
    city = City.find(params[:city]) 
    rescue ActiveRecord::RecordNotFound 
    render :nothing => true 
    return 
    end 

leere Seite zwischengespeichert!

Was ich in dieser Situation tun soll?

Antwort

0

Versuchen:

caches_page :index, :if => :city_exists? 

private 

def city_exists 
    city = City.find(params[:city]) 
    !city.nil? ? true : false 
end 

Und ich denke, Sie Aktion Caching oder Fragment Caching verwenden können.

Werfen Sie einen Blick in die Details für Extending Caching.

+0

Ich cache JSON-Seite mit Shows für die Stadt und ich denke, Seitencache ist die beste Wahl (vielleicht nicht - ich habe gerade angefangen, Schienen zu lernen). Aber Ihre Lösung erfordert eine zusätzliche Datenbankanforderung für die Stadt (ich brauche es in meinem Controller) - mein sei es gibt andere Optionen ... – Donotello

+1

hoffe ich. Schlage vor, das Fragment-Caching zu verwenden. Sehen Sie sich http://broadcastingadam.com/2011/05/advanced_caching_in_rails an – Vik