ActionController: rescue_from
O curso parte da linha rescue_from do ApplicationController deste app, que captura ActiveRecord::RecordNotFound e renderiza uma página própria de não encontrado. Trata das formas com with: e com bloco e do papel da aridade do handler. Mostra por que a ordem de declaração vence a especificidade quando vários handlers casam. Cobre a família de exceções do ActiveRecord vista pelo is_a? e o mapeamento padrão de RecordNotFound para 404. Mostra o que acontece quando nenhum handler casa ou quando o handler falha. A última aula traz um simulador do algoritmo de busca.
O que você vai aprender
- ✓Como uma linha rescue_from no ApplicationController leva um slug errado a uma página customizada
- ✓As formas com with: e com bloco, e como a aridade decide se o handler recebe a exceção
- ✓Por que o handler declarado por último vence e como os handlers são herdados
- ✓Como o is_a? cobre uma família inteira de exceções e quando nomear uma classe exata
- ✓Como o Rails mapeia RecordNotFound para 404 e o que um rescue_from próprio acrescenta
- ✓O que acontece quando nenhum handler casa ou quando o próprio handler levanta erro
rescue_from: a única linha deste app, de um slug errado até uma página customizada
As páginas de curso e de aula deste app são achadas pelo slug, não por um id numérico. Os query objects por trás delas:
Ler a aula completa grátis →Currículo
7 aulasrescue_from: a única linha deste app, de um slug errado até uma página customizada
Segue um slug de curso ou aula inexistente do find_by! pelo rescue_from até a página do render_not_found.
with: ou um bloco: as duas formas que rescue_from aceita
Compara as formas with: e bloco, que ocupam o mesmo espaço, e mostra como a aridade controla o argumento.
Múltiplas chamadas rescue_from: ordem de declaração vence especificidade
Mostra que os handlers são buscados do mais novo ao mais antigo e que subclasses os herdam.
is_a? e a família de exceções do ActiveRecord que este app nunca precisou nomear
Explica como capturar ActiveRecordError pegaria quatro exceções irmãs e por que este app nomeia só RecordNotFound.
O Rails já sabe que RecordNotFound é um 404: o que rescue_from compra pra este app
Mostra que o Rails já mapeia RecordNotFound para 404, então o rescue_from deste app fornece a página.
Duas formas de falhar: nenhum handler bate, ou o próprio handler quebra
Trata de uma exceção sem handler que case e de uma levantada dentro do handler, ambas indo ao tratamento padrão.
Juntando tudo: o algoritmo de busca em miniatura
Revê o modelo completo, alerta sobre capturar StandardError e fecha com um pequeno simulador da busca.