W zależności od sposobu korzystania z biblioteki, istnieją różne sposoby ratowania wyjątek.
W bibliotece
Zakładając, że stworzyła opakowanie dostępu do jakiegoś serwisu WWW, można mieć obwoluta ratowania wyjątek i zawsze powrócić do „bezpiecznych” dane.
W akcji
Jeśli zadzwonisz specyficzna metoda działania i sukces metoda jest wymogiem dla działania, można uratować go w akcji. W poniższym przykładzie uratowałem błąd i pokazałem konkretny szablon, aby poradzić sobie z problemem.
def action
perform_external_call
rescue Timeout::Error => e
@error = e
render :action => "error"
end
W regulatorze
Jeśli wywołanie metody mogą występować w wielu różnych działań, może chcesz używać rescue_from
.
class TheController < ApplicationController
rescue_from Timeout::Error, :with => :rescue_from_timeout
protected
def rescue_from_timeout(exception)
# code to handle the issue
end
end
Nigdy uratować 'Exception'. To zły nawyk programowania. Powinieneś uratować określone wyjątki lub przynajmniej "StandardError". –
"Wyjątek" miał na celu wyjaśnienie, gdzie można złapać konkretną, ale masz rację, to powinno być wyraźniejsze! :) – xijo
W pewnym sensie wiedziałem, jak to zrobić, gdy nie znaleziono ActiveRecord. Po prostu nie wiedziałem, co lub jak uratować ten konkretny błąd. – kgpdeveloper