2010-10-19 5 views
5

Compte tenu du contrôleur suivant:Rails 3 - AJAX, réponse JS - Comment gérer les erreurs

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

Quelle est la façon de gérer Rails une réponse d'erreur .JS ... Dois-je créer un fichier .js avec un autre nom de fichier juste pour les erreurs de servering? Puis-je ajouter un IF ELSE dans le fichier .js?

grâce

Répondre

8

Il a été un moment depuis que cette question a été publiée - mais je viens de passer un certain temps comprendre ceci & n'a pas pu trouver trop d'aide sur cette ligne, donc:

La solution est de créer des fichiers .js.erb - un pour le succès et un pour l'échec.

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 

Si semble que si vous ne spécifiez pas un nom de fichier, rails rechercheront create.js.erb dans les deux cas (parce que format.js est appelé de créer). Ce n'est pas génial dans le cas de situations de réussite ou d'erreur, car vous souhaitez un comportement différent pour chaque scénario. Remplacez donc les noms de fichiers par l'attribut: action.

Questions connexes