Mam dwa programy obsługi rescue_from, program obsługi 404 i catch all handler. Połów zawsze wywołuje wyjątki ActiveRecord :: RecordNotFound, a program obsługi 404 nigdy nie jest wywoływany. Oczekuję, że program obsługi o większej specyficzności zostanie wywołany, ale tak się nie stanie.Jak określić, który program obsługi wyjątków rescue_from wybierze w Railsach?
application_controller.rb
# ActiveRecord 404
rescue_from ActiveRecord::RecordNotFound do |e|
...
end
# Catch all unhandled exceptions
rescue_from Exception do |e|
...
end
api docs for rescue_from mówi co następuje:
wysuwane są dziedziczone. Są wyszukiwane od prawej do lewej, od od dołu do góry i do góry w hierarchii. Program obsługi pierwszej klasy , dla którego jest spełniony wyjątek.is_a? (Klass), to ten, który jest wywoływany, jeśli jest dowolny.
Czy interpretuję błędne oświadczenie. Jak uzyskać zachowanie, którego szukam?
Próbowałem nawet wcześniej i wydawało się, że nie działa, ale teraz tak jest. Dzięki. –
Proponuję nigdy nie ratować "Wyjątku", ponieważ jest on boginią matki wszystkich innych wyjątków. To nawet uratuje twoje błędy składniowe lub cokolwiek innego. – Hendrik
StandardError byłby klasą typu catch-all. – Duke