2009-10-27 4 views
1

Je dois déboguer une erreur liée à la base de données et j'ai surveillé en permanence le journal en cas d'erreur causée par db. Comme l'erreur est déjà connecté, je veux avoir des exceptions comme:Supprimer l'exception dans le navigateur

ActiveRecord :: StatementInvalid

à supprimer afin que l'utilisateur ne verra pas le «quelque chose a mal tourné la page. L'erreur est limitée à une petite section de l'application et nous voulons supprimer cette suppression une fois qu'elle est corrigée.

Merci !!!

+0

Et que voulez-vous l'utilisateur de voir? – JRL

Répondre

3

Vous pouvez ajouter une ligne rescue_from dans votre ApplicationController pour intercepter cette exception particulière si elle est lancée dans un contrôleur. Ensuite, vous devez décider ce qui doit se passer dans cette situation (par exemple rediriger vers la page de démarrage).

+0

doux c'est exactement ce que je cherche au lieu de 'rescue_action_in_public' – penger

0

Vous pouvez renvoyer le code qui échoue dans un bloc de début de secours.

begin 
    # stuff that gets executed 
    ... 
    # DangerousStatement 
    ... 
    # stuff that doesn't get executed if dangerous statement raises an error 
    ... 
rescue 
    # set variables that are needed by other code and would have been set if dangerous statement succeeded 
    ... 
end 

Cependant, c'est vraiment quelque chose que vous devriez déboguer en mode développement.

1

En supposant que vous avez un problème dans le « créer » l'action d'un contrôleur, vous pouvez faire quelque chose comme:

def create 
    @record.create(params[:record]) 
rescue ActiveRecord::StatementInvalid 
    flash[:notice] = "There was a problem, but we know about it." 
    redirect_to root_path 
end 
Questions connexes