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
3 Réponses :
S'il n'y a pas de utilisateur code> avec ce ID code>, alors user.find code> retournera nil code>. Retour nil code> n'est pas un étui d'erreur et ne déclenchera pas un sauvetage code>. P>
Je suis à peu près sûr que ce n'est pas raison. Recherche Code> avec un identifiant non valide augmentera Activerecord :: RecordNotfound code>. Si vous utilisez l'un des Finders dynamiques, par exemple user.find_by_name code> avec une valeur qui ne correspond pas à un enregistrement puis qui retournera nil code>. Voir API.RubyonRails.org/classes/acterecord/base.html#m002263 a>
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]) code>.
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
Juste une réponse de sauvetage globale Rails:
J'ai trouvé que ceci très cool: p>
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.