Introdução
As rotas no Rails são responsáveis por direcionar requisições HTTP para os controladores e suas respectivas ações. Elas são definidas no arquivo config/routes.rb e seguem uma estrutura declarativa que facilita a organização e manutenção do código. Este mini guia apresenta os principais conceitos sobre rotas no Rails, de forma clara e objetiva.
O Básico das Rotas
Definição de Rota Simples
As rotas básicas no Rails podem ser definidas de maneira direta. Por exemplo:
Rails.application.routes.draw do
  get 'home/index'
end
Essa rota faz com que uma requisição GET para /home/index seja direcionada para o HomeController, ação index.
Rotas RESTful
O Rails adota o padrão REST, permitindo a criação de rotas com um único comando:
resources :posts
Isso gera automaticamente as sete rotas principais para um recurso posts:
- 
GET /posts→ Lista todos os posts (index)
- 
GET /posts/:id→ Mostra um post específico (show)
- 
GET /posts/new→ Exibe o formulário de criação (new)
- 
POST /posts→ Cria um novo post (create)
- 
GET /posts/:id/edit→ Exibe o formulário de edição (edit)
- 
PATCH/PUT /posts/:id→ Atualiza um post (update)
- 
DELETE /posts/:id→ Exclui um post (destroy)
  
  
  Definindo um Recurso Manualmente (Sem resources)
Nem sempre usamos o helper resources. Podemos definir manualmente as rotas para um recurso completo, como countries, caso queiramos mais controle ou aprendizado.
get    '/countries',          to: 'countries#index',   as: 'countries'
get    '/countries/new',      to: 'countries#new',     as: 'new_country'
post   '/countries',          to: 'countries#create'
get    '/countries/:id',      to: 'countries#show',    as: 'country'
get    '/countries/:id/edit', to: 'countries#edit',    as: 'edit_country'
patch  '/countries/:id',      to: 'countries#update'
put    '/countries/:id',      to: 'countries#update'
delete '/countries/:id',      to: 'countries#destroy'
Explicação
- 
GET /countries→ Lista todos os países (index)
- 
GET /countries/new→ Formulário de novo país (new)
- 
POST /countries→ Cria um novo país (create)
- 
GET /countries/:id→ Exibe detalhes de um país (show)
- 
GET /countries/:id/edit→ Formulário de edição (edit)
- 
PATCH/PUT /countries/:id→ Atualiza o país (update)
- 
DELETE /countries/:id→ Remove o país (destroy)
Vantagens e Uso
Essa abordagem é útil quando:
- Você quer personalizar cada rota com mais liberdade
- Deseja evitar geração automática de rotas não utilizadas
- Precisa de nomes específicos para as rotas
Além disso, os helpers de caminho continuam disponíveis:
countries_path
new_country_path
country_path(@country)
edit_country_path(@country)
Rotas Aninhadas
Quando há um relacionamento entre recursos, podemos usar rotas aninhadas para estruturar as URLs:
resources :countries do
  resources :states do
    resources :cities
  end
end
Isso gera caminhos como:
- /countries/:country_id/states/:state_id/cities/:id
Interpretando Paths em Rotas Profundas
Entender como interpretar paths em rotas aninhadas é essencial para evitar erros e construir URLs corretamente. Vamos analisar um exemplo:
Estrutura de Rotas
resources :universities do
  resources :departments do
    resources :professors do
      member do
        get 'profile' # /universities/:university_id/departments/:department_id/professors/:id/profile
      end
    end
  end
end
Como Ler e Construir Helpers de Caminho
Dado o exemplo acima, podemos identificar como construir corretamente as URLs.
- Para listar todos os departamentos de uma universidade:
  university_departments_path(@university)
  # => '/universities/:university_id/departments'
- Para acessar um departamento específico:
  university_department_path(@university, @department)
  # => '/universities/:university_id/departments/:id'
- Para acessar os professores de um departamento específico:
  department_professors_path(@university, @department)
  # => '/universities/:university_id/departments/:department_id/professors'
- Para acessar o perfil de um professor:
  profile_professor_path(@university, @department, @professor) 
  # => '/universities/:university_id/departments/:department_id/professors/:id/profile'
Dicas para Interpretação de Paths
- A ordem dos argumentos importa: Sempre forneça os IDs dos recursos pais antes dos filhos.
- 
Use rake routes: Esse comando exibe todas as rotas disponíveis e seus respectivos helpers.
- Analise a hierarquia: Cada recurso dentro de outro exige os IDs dos níveis superiores.
- 
Verifique o nome dos helpers: Rails gera nomes padronizados baseados na estrutura definida em routes.rb.
Buscando Rotas Específicas
Ao trabalhar com um grande número de rotas, pode ser desafiador encontrar uma específica. O Rails fornece algumas ferramentas para facilitar essa busca.
  
  
  Usando rake routes | grep
Podemos filtrar rotas usando grep para encontrar apenas as que nos interessam:
rake routes | grep users
Isso retorna apenas as rotas que contêm users no nome ou caminho.
  
  
  Usando rails routes -g
Uma alternativa mais eficiente no Rails 5+ é o comando:
rails routes -g users
Ele tem a mesma função do grep, mas de forma mais otimizada, sem a necessidade de encadear comandos.
Nomeação e Redirecionamento
Nomeando Rotas
Nomear rotas facilita seu uso no código:
get 'about', to: 'pages#about', as: 'about_page'
Agora podemos chamar about_page_path em vez de escrever manualmente '/about'.
Redirecionamento de Rotas
Podemos redirecionar URLs antigas para novas:
get '/old_route', to: redirect('/new_route')
Conclusão
As rotas são fundamentais para qualquer aplicação Rails, permitindo estruturar URLs de forma eficiente e organizada. O uso de helpers de caminho simplifica a navegação, enquanto rotas nomeadas e personalizadas tornam o código mais legível e fácil de manter. Além disso, aprender a interpretar paths e buscar rotas específicas com rails routes -g ou grep facilita a manutenção e depuração da aplicação. Com esse conhecimento, você pode criar aplicações escaláveis e bem estruturadas!
 

 
    
Top comments (0)