Ho due operatori rescue_from, un gestore 404 e un catch all handler. Il catch viene sempre chiamato per le eccezioni ActiveRecord :: RecordNotFound e il gestore 404 non viene mai chiamato. La mia aspettativa è che venga chiamato il gestore con più specificità, ma questo non accade.Come determinare quale gestore di eccezioni rescue_from sceglierà in Rails?
application_controller.rb
# ActiveRecord 404
rescue_from ActiveRecord::RecordNotFound do |e|
...
end
# Catch all unhandled exceptions
rescue_from Exception do |e|
...
end
Il api docs for rescue_from dice il seguente:
gestori sono ereditate. Vengono cercati da destra a sinistra, da dal basso verso l'alto e in alto nella gerarchia. Il gestore della prima classe per cui exception.is_a? (Klass) è valido è quello invocato, se qualsiasi.
Sto interpretando la frase about errata. Come ottengo un comportamento che sto cercando?
L'ho provato anche prima e non sembrava funzionare ma ora lo fa. Grazie. –
Suggerisco di non salvare mai "Eccezione" poiché è la divinità madre di tutte le altre eccezioni. Questo potrebbe anche salvare i tuoi errori di sintassi o qualsiasi altra cosa. – Hendrik
StandardError sarebbe la classe catch-all. – Duke