Je voudrais soulever une exception pour qu'elle fasse la même chose qu'une exception Rails normale. En particulier, affichez l'exception et la trace de la pile en mode développement et affichez la page "Nous sommes désolés, mais quelque chose s'est mal passé" en mode production.
J'ai essayé ce qui suit:
raise "safety_care group missing!" if group.nil?
Mais il écrit simplement "ERROR signing up, group missing!"
dans le fichier development.log
ruby-on-rails
exception
exception-handling
Chirag Patel
la source
la source
Réponses:
Vous n'avez rien à faire de spécial, cela devrait simplement fonctionner.
Quand j'ai une nouvelle application de rails avec ce contrôleur:
et allez à
http://127.0.0.1:3000/foo/
Je vois l'exception avec une trace de pile.
Il se peut que vous ne voyiez pas l'intégralité de la trace de pile dans le journal de la console car Rails (depuis 2.3) filtre les lignes de la trace de pile qui proviennent du framework lui-même.
Voir
config/initializers/backtrace_silencers.rb
dans votre projet Railsla source
Vous pouvez le faire comme ceci:
Ce que vous faites ici est de créer une classe "NotActivated" qui servira d'exception. En utilisant lever, vous pouvez lancer "NotActivated" comme exception. rescue_from est le moyen d'intercepter une exception avec une méthode spécifiée (not_activated dans ce cas). Un très long exemple, mais il devrait vous montrer comment cela fonctionne.
Meilleurs voeux,
Fabian
la source
Si vous avez besoin d'un moyen plus simple de le faire et que vous ne voulez pas trop de bruit, une exécution simple pourrait être:
Cela soulèvera une exception, disons
e
avece.message = something bad happened!
et puis vous pouvez le sauver pendant que vous sauvez toutes les autres exceptions en général.
la source