2010-10-19 5 views
5

Angesichts der folgenden Controller:Rails 3 - AJAX, Antwort JS - Wie Fehler behandeln

def create 
     if @mymodel.save 
     format.js 
     else 
     format.js { render :js => @mymodel.errors } 
     end 
end 

Was die Schienen Art und Weise ist eine .JS Fehlerreaktion der Handhabung ... Muss ich schaffen Js mit einer anderen Datei Dateiname nur für Serverfehler?

Füge ich einen IF ELSE in die .js-Datei ein?

dank

Antwort

8

Es ist eine Weile her, seit diese Frage gestellt wurde - aber ich habe nur eine Weile, dies herauszufinden & nicht zu viel Hilfe zu diesem Online finden konnte, so:

Die Lösung ist, Erstellen Sie .js.erb-Dateien - eine für Erfolg und eine für Fehler.

def create 
    @foo = Foo.new(params[:foo]) 
    if @foo.save 
     respond_to do |format| 
      format.html { redirect_to root_path } 
      format.js { render :action => "success"} #rails now looks for success.js.erb 
     end 
    else 
     respond_to do |format| 
     format.html { render :action => 'new'} 
     format.js { render :action => "failure"} #rails now looks for failure.js.erb 
     end 
    end 
    end 
end 

Wenn scheint, dass, wenn Sie keinen Dateinamen angeben, Schienen für create.js.erb in beiden Fällen aussehen wird (weil format.js von erstellen genannt). Dies ist bei Erfolgs-/Fehlersituationen nicht sehr hilfreich, da Sie für jedes Szenario ein anderes Verhalten wünschen - überschreiben Sie also die Dateinamen durch das Attribut: action.