Existe-t-il un moyen d'attraper toutes les exceptions non corrigées dans un contrôleur de rails, comme ceci:
def delete
schedule_id = params[:scheduleId]
begin
Schedules.delete(schedule_id)
rescue ActiveRecord::RecordNotFound
render :json => "record not found"
rescue ActiveRecord::CatchAll
#Only comes in here if nothing else catches the error
end
render :json => "ok"
end
Je vous remercie
ruby-on-rails
Neigaard
la source
la source
rescue => e
bloc uniquement?Vous pouvez également définir une méthode rescue_from.
En fonction de votre objectif, vous pouvez également envisager de NE PAS gérer les exceptions sur une base par contrôleur. À la place, utilisez quelque chose comme le gem exception_handler pour gérer les réponses aux exceptions de manière cohérente. En prime, cette approche gérera également les exceptions qui se produisent au niveau de la couche middleware, comme l'analyse des demandes ou les erreurs de connexion à la base de données que votre application ne voit pas. Le gem exception_notifier peut également être intéressant.
la source
rescue_from Exception
? Je crois comprendre qu'il vaut mieux sauver deStandardError
, donc des choses commeSyntaxError
etLoadError
ne sont pas prises.Vous pouvez intercepter les exceptions par type:
la source
Exception
directement; voir stackoverflow.com/questions/10048173/…rescue
sans arguments sauvera toute erreur.Alors, vous voudrez:
la source
En fait, si vous voulez vraiment tout attraper , il vous suffit de créer votre propre application d'exceptions, qui vous permet de personnaliser le comportement qui est généralement géré par le middleware PublicExceptions: https://github.com/rails/rails/blob/4-2 -stable / actionpack / lib / action_dispatch / middleware / public_exceptions.rb
Un tas d'autres réponses partagent des joyaux qui font cela pour vous, mais il n'y a vraiment aucune raison que vous ne puissiez pas simplement les regarder et le faire vous-même.
Une mise en garde: assurez-vous de ne jamais lever d'exception dans votre gestionnaire d'exceptions. Sinon, vous obtenez un moche FAILSAFE_RESPONSE https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L4-L22
BTW, le comportement du contrôleur provient de rescuable: https://github.com/rails/rails/blob/4-2-stable/activesupport/lib/active_support/rescuable.rb#L32-L51
la source