12
votes

Travailler avec Rescue dans des rails

Je travaille avec la pièce suivante;

def index
  @user = User.find(params[:id]) 
  rescue
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
  else 
    flash[:notice] = "OK"
    redirect_to(:action => 'index')
end


1 commentaires

Ce code est-il réel de votre application? Comme il le reste, on dirait que vous redirigeez-vous à la même action (index) qui entraînera une boucle infinie.


3 Réponses :


-5
votes

S'il n'y a pas de utilisateur avec ce ID , alors user.find retournera nil . Retour nil n'est pas un étui d'erreur et ne déclenchera pas un sauvetage .


2 commentaires

Je suis à peu près sûr que ce n'est pas raison. Recherche avec un identifiant non valide augmentera Activerecord :: RecordNotfound . Si vous utilisez l'un des Finders dynamiques, par exemple user.find_by_name avec une valeur qui ne correspond pas à un enregistrement puis qui retournera nil . Voir API.RubyonRails.org/classes/acterecord/base.html#m002263


Eh bien monsieur, j'ai vérifié et vous êtes correct. Merci. L'appel de recherche dans l'OP devrait réellement soulever, à moins que le code ne soit réellement user.find (: d'abord, paramètres [: ID]) .



35
votes

Tout code après la fin du bloc de sauvetage n'est interprété que s'il n'y a pas de rendement dans le bloc de sauvetage. Vous pouvez donc appeler le retour à la fin de votre bloc de sauvetage.

class UserController < ApplicationController
  def rescue_in_public(exception)
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
  end

  def index
    @user = User.find(params[:id]) 
    flash[:notice] = "OK"
    redirect_to(:action => 'index')
  end
end


0 commentaires

4
votes

Juste une réponse de sauvetage globale Rails:

J'ai trouvé que ceci très cool: xxx


0 commentaires