Existe uma maneira de capturar todas as exceções não detectadas em um controlador Rails, como este:
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
Obrigado
ruby-on-rails
Neigaard
fonte
fonte
rescue => e
apenas no bloco?Você também pode definir um método rescue_from.
Dependendo de qual é o seu objetivo, você também pode considerar NÃO manipular exceções por controlador. Em vez disso, use algo como a gem exception_handler para gerenciar as respostas às exceções de forma consistente. Como um bônus, esta abordagem também tratará exceções que ocorrem na camada de middleware, como análise de solicitação ou erros de conexão de banco de dados que seu aplicativo não vê. A gema exception_notifier também pode ser de interesse.
fonte
rescue_from Exception
? Meu entendimento é que é melhor resgatarStandardError
, então coisas comoSyntaxError
eLoadError
não são capturadas.Você pode capturar exceções por tipo:
fonte
Exception
diretamente; consulte stackoverflow.com/questions/10048173/…rescue
sem argumentos resgatará qualquer erro.Então, você vai querer:
fonte
Na verdade, se você realmente deseja capturar tudo , basta criar seu próprio aplicativo de exceções, que permite personalizar o comportamento que geralmente é tratado pelo middleware PublicExceptions: https://github.com/rails/rails/blob/4-2 -stable / actionpack / lib / action_dispatch / middleware / public_exceptions.rb
Um monte de outras respostas compartilham joias que fazem isso por você, mas realmente não há razão para que você não possa simplesmente olhar para elas e fazer você mesmo.
Uma advertência: certifique-se de nunca lançar uma exceção em seu manipulador de exceções. Caso contrário, você obterá um FAILSAFE_RESPONSE feio https://github.com/rails/rails/blob/4-2-stable/actionpack/lib/action_dispatch/middleware/show_exceptions.rb#L4-L22
BTW, o comportamento no controlador vem de recuperável: https://github.com/rails/rails/blob/4-2-stable/activesupport/lib/active_support/rescuable.rb#L32-L51
fonte