Gibt es eine Möglichkeit, alle nicht abgefangenen Ausnahmen in einem Rails-Controller wie folgt abzufangen:
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
Danke dir
ruby-on-rails
Neigaard
quelle
quelle
rescue => e
typen nur im block fangen ?Sie können auch eine Rettungsmethode definieren.
Abhängig von Ihrem Ziel möchten Sie möglicherweise auch erwägen, Ausnahmen NICHT pro Controller zu behandeln. Verwenden Sie stattdessen so etwas wie das Juwel " exception_handler" , um Antworten auf Ausnahmen konsistent zu verwalten. Als Bonus werden bei diesem Ansatz auch Ausnahmen behandelt, die auf der Middleware-Ebene auftreten, z. B. das Analysieren von Anforderungen oder Datenbankverbindungsfehler, die Ihre Anwendung nicht sieht. Das Juwel " exception_notifier" könnte ebenfalls von Interesse sein.
quelle
rescue_from Exception
? Mein Verständnis ist, dass es besser ist, sich zu rettenStandardError
, damit Dinge wieSyntaxError
undLoadError
nicht gefangen werden.Sie können Ausnahmen nach Typ abfangen:
quelle
Exception
direkt zu retten ; siehe stackoverflow.com/questions/10048173/…rescue
Ohne Argumente wird jeder Fehler behoben.Also wirst du wollen:
quelle
Wenn Sie wirklich alles abfangen möchten, erstellen Sie einfach Ihre eigene Ausnahme-App, mit der Sie das Verhalten anpassen können, das normalerweise von der PublicExceptions-Middleware verarbeitet wird: https://github.com/rails/rails/blob/4-2 -stable / actionpack / lib / action_dispatch / middleware / public_exceptions.rb
Eine Reihe anderer Antworten teilen Edelsteine, die dies für Sie tun, aber es gibt wirklich keinen Grund, warum Sie sie nicht einfach ansehen und selbst tun können.
Eine Einschränkung: Stellen Sie sicher, dass Sie in Ihrem Ausnahmebehandler niemals eine Ausnahme auslösen. Andernfalls erhalten Sie eine hässliche FAILSAFE_RESPONSE https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L4-L22
Übrigens kommt das Verhalten in der Steuerung von einem abrufbaren: https://github.com/rails/rails/blob/4-2-stable/activesupport/lib/active_support/rescuable.rb#L32-L51
quelle