Respostas multi-formato
O curso mostra como uma ação de controller Rails devolve respostas diferentes conforme o formato a que a requisição resolve. Começa pelo respond_to no handler de 404 do app. Depois segue pelo código instalado do Rails, que define a ordem de escolha do formato: o parâmetro format, o cabeçalho Accept e o padrão HTML. As aulas seguintes tratam da forma curta sem bloco, do format.any e do alias format.all. Também tratam da separação entre sucesso e falha dentro de um bloco de formato e de uma rota que força PNG com defaults.
O que você vai aprender
- ✓Como o respond_to roda só o bloco do formato resolvido
- ✓A ordem que o Rails segue para escolher o formato de uma requisição
- ✓Quando uma chamada de formato precisa de bloco e quando a forma curta basta
- ✓Como format.any e format.all pegam formatos não tomados
- ✓Separar sucesso e falha dentro de um bloco de formato
- ✓Forçar um formato na rota com defaults: { format: :png }
respond_to do |format|...end, já rodando no handler de 404 deste app
Rotas de recursos aninhados, o curso anterior, seguiu como uma requisição chega a uma ação de controller. Isso é metade do trabalho. Quando uma ação como Admin::Catalog::Lessons::ImagesController#destroy roda, ela precisa decidir o que devolver. Neste app costuma haver mais de uma resposta certa:…
Ler a aula completa grátis →Currículo
7 aulasrespond_to do |format|...end, já rodando no handler de 404 deste app
Como o respond_to roda só o bloco do formato da requisição, visto no handler de 404 do app.
Como o formato é escolhido, no código instalado do Rails
A ordem que o Rails usa para escolher o formato: parâmetro format, cabeçalho Accept, extensão, XHR e HTML.
A forma curta: format.turbo_stream sozinho vs. um bloco
Quando format.turbo_stream sozinho basta e quando é preciso um bloco para renderizar outro template.
format.any e format.all: um coringa, dois nomes
Como o format.any pega formatos não tomados, por que format.all é o mesmo método e quando surge UnknownFormat.
Separando sucesso e falha dentro de um bloco de formato
Separar o resultado de um service dentro de format.turbo_stream enquanto o format.html redireciona com outro flash.
defaults: { format: :png }: forçando um formato antes da negociação
Como defaults: { format: :png } numa rota define o formato antes da negociação e dispensa o respond_to.
Juntando tudo: três padrões, uma decisão por rota
Revisão dos três padrões do app: respond_to com ramos, formato forçado pela rota e nenhum tratamento de formato.