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)