Caminhar nas Rails routes

Caminhar nas Rails routes

A mágica do Rails está baseada principalmente no roteador (roteamento em inglês) desse framework. É por isso que, se você deseja obter o máximo do Rails evitando horas de pesquisa tentando corrigir erros de roteamento, é melhor entender o processo por trás da mágica do roteamento. Se você quer saber como o roteador e as rotas funcionam no Rails, como configurá-los, quais são as rotas da sua aplicação e como utilizá-las, então continue lendo.

A ideia básica do roteador Rails é muito simples e ainda assim poderosa. Vamos começar com um exemplo da vida real: suponha que você queira se comunicar com alguém que trabalha em um prédio com 100 escritórios, mas você não tem o número direto dessa pessoa, apenas o prédio onde ela trabalha. Tentar ir até o prédio e perguntar em cada escritório não seria o mais prático, então seria muito melhor ligar para o número do prédio. Quando você se comunicar, a recepcionista perguntará com quem você deseja falar, conectando-o se essa pessoa estiver disponível.

Se compararmos este exemplo com o processo em execução do roteador, a chamada inicial para o prédio seria a requisição HTTP do navegador e o roteador Rails faria o papel de recepcionista, cuidando de fazer a conexão não com uma pessoa, mas realizando uma ação.

Este é um método do controller que, ao ser chamado, gera uma resposta que será a view que será apresentada ao usuário.
Esta operação é bastante fácil de entender, mas há muito mais para entender. Para explicar esses conceitos, usaremos neste artigo o exemplo de um aplicativo para livros virtuais que possui os recursos de autores e livros.

Configuração de rotas

Para começar a trabalhar com rotas, a primeira coisa é saber como configurá-las. Toda configuração de rotas no Rails é feita em um único arquivo, config/routes.rb, gerado automaticamente pelo Rails ao criar o projeto. Inicialmente, o arquivo ficará conforme a figura abaixo. Um detalhe importante é o link que se encontra na linha 5, que permite aceder à documentação oficial dos percursos (em inglês).

Vamos começar configurando as rotas para o autor. Lembre-se de que você deseja ter rotas que permitam casar as solicitações com os métodos/ações presentes no controlador. No arquivo routes.rb escreveremos o seguinte:

Esta rota terá o ID do autor como parâmetro e buscará a ação ou método show dentro do controller Authors. Com isso, teríamos a rota para mostrar um autor. As outras ações mais comuns são mostrar tudo, criar, editar e excluir. O acima daria um total de 7 rotas que devemos configurar para essas ações. Felizmente, o Rails facilita para nós e nos permite criar todas essas rotas com uma única linha de código como a seguir:

Esta linha gera as rotas correspondentes às ações RESTful, conforme abaixo:

  • GET /autores autores#index
  • GET /autores/new autores#new
  • POST /autores autores#create
  • GET /autores/:id autores#show
  • GET /autores/:id/edit autores#edit
  • PATCH/PUT /autores/:id autores#update
  • DELETE /autores/:id autores#destroy

Se por algum motivo em sua aplicação você não precisar de todos esses caminhos para um recurso, o Rails também oferece a possibilidade de declarar apenas os necessários via resources. Aqui está um exemplo onde as rotas são configuradas para o mesmo recurso, author, mas apenas para index e show:

No entanto, neste exemplo, precisamos de todos os caminhos, então vamos defini-los como eram antes, ou seja, recursos :autores. Desta forma, todos os caminhos necessários para o recurso autor já foram configurados. Um ponto muito importante aqui é que, para usar recursos, os nomes dos métodos/ações em seu controlador devem ser os mesmos de acordo com a convenção show, destroy, update, etc. Claro, é possível personalizá-los também, mas seguir a regra prática do Rails sobre configuração permitirá que você construa aplicativos de maneira mais rápida e padronizada.

Rotas aninhadas

É muito fácil configurar a rota para um recurso, mas quando o recurso é filho de outro recurso pela lógica da aplicação, é necessário ir para as rotas aninhadas. Preste bastante atenção nesta seção: declarar rotas aninhadas é muito fácil, mas não entender porque elas estão aninhadas ou o nível correto de aninhamento é um dos maiores problemas para quem está começando com rotas no Rails.

Em nosso exemplo, temos o autor , que (pela lógica) pode ter um ou vários artigos, então o recurso artigo deve ter os caminhos aninhados com o autor. Fazer isso no Rails é tão simples quanto abaixo:

Assim, as rotas para o recurso pai, autor e filho, artigo (artículo no espanhol), já foram configuradas. Embora o Rails permita um aninhamento de rota mais complexo, recomenda-se um máximo de três níveis (por exemplo, autor tem artigos e artigo tem fotos). Aninhamento mais profundo torna-se complexo de manter.

Para evitar esse problema, você pode configurar apenas as rotas que precisam identificar o pai do recurso como rotas aninhadas e as outras como normais, assim:

O Rails também oferece uma sintaxe abreviada para isso:

Outro fator que não deve ser esquecido é que as rotas aninhadas, quando chamadas, precisam do ID do recurso pai além do filho. Se você deseja criar um novo artigo, o caminho precisará do ID do autor a quem o artigo pertencerá. Atenção: esquecer isso gera erros e mau funcionamento do aplicativo, além das rotas mencionadas, também deve ser declarada a rota root responsável por nos direcionar para a ação que processa a visualização de nossa página inicial.

Em nosso exemplo, a página inicial será o índice dos autores, para configurar esta rota, basta escrever root "autores#index" em nosso arquivo config/routes.rb. É assim que terminamos de configurar as rotas, então o arquivo final ficaria assim:

Veja suas rotas

Agora você sabe como configurar suas rotas, mas ao desenvolver seu aplicativo, muitas vezes você precisará ver quais rotas você configurou. Para fazer isso, o Rails oferece várias opções. Primeiro no seu terminal você pode rodar o comando rails routes, assim:

Outra opção é adicionar o sinalizador -E ao comando para uma exibição mais organizada.

Se você deseja pesquisar uma rota específica, pode usar as opções -g, que retornam todas as rotas que possuem uma semelhança parcial, e -c, que retorna todas as rotas de um controlador específico.

Ligue para as rotas

Até agora vimos como configurar rotas que combinam com as diferentes ações em nossos controladores, mas também queremos chamar essas rotas em nosso aplicativo. Para isso, não é necessário escrever toda a URL ou caminho da rota, pois o Rails também possui métodos para facilitar esse trabalho. Esses métodos são os auxiliares de rotas _path e _url. Vamos colocar o exemplo com os caminhos do autor usando o helper _path:

helper

retorna

autores_path

/autores

new_autor_path

/photos/new


edit_photo_path(:id)

/photos/10/edit

photo_path(:id)

/photos/10

No caso do helper _url, a diferença é que ele retorna o caminho, mas também o host e a porta.


Organización de rutas

Em projetos pequenos como o abordado neste artigo, é fácil manter os caminhos organizados, mas quando se trata de um projeto grande, manter os caminhos bem organizados pode se tornar um desafio. Ainda assim, é fundamental mantê-los para evitar erros na aplicação. Entre as coisas que podem ser feitas para manter as rotas em ordem estão:

  • Declare rotas apenas para ações necessárias. Conforme explicado anteriormente, com Rails você pode especificar certas ações. Isso permite que você tenha apenas as rotas necessárias para o aplicativo e evite aquelas que não serão usadas.
  • Nomeie suas rotas. Quando você tem muitas rotas, pode ser útil dar a elas um alias. Isso é feito com a palavra-chave :as.
  • Agrupamento de rotas. As rotas relacionadas podem ser agrupadas em um único escopo usando o método de escopo. Isso é muito útil porque permite definir opções padrão para todas as rotas do mesmo grupo.

Conclusão

As rotas no Rails permitem que o roteador chame as ações corretas e faça nosso aplicativo funcionar da maneira que queremos. O Rails oferece vários métodos para configurá-los (resources), exibi-los (rotas do Rails) e chamá-los em nossa aplicação sem precisar escrever a url inteira, graças a _path e _helper. Embora cada projeto tenha seus requisitos diferentes e isso possa variar um pouco na forma como as rotas são tratadas, as bases explicadas neste artigo serão muito úteis para você. Espero que você tenha gostado de lê-lo.

Até o próximo artigo!

💡
As opiniões e comentários expressos neste artigo são de propriedade exclusiva de seu autor e não representam necessariamente o ponto de vista da Revelo.

A Revelo Content Network acolhe todas as raças, etnias, nacionalidades, credos, gêneros, orientações, pontos de vista e ideologias, desde que promovam diversidade, equidade, inclusão e crescimento na carreira dos profissionais de tecnologia.