DEV Community

Diego Novais
Diego Novais

Posted on

O que eu gostaria de ter aprendido sobre rotas no Rails lá no início

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode
  • Para acessar um departamento específico:
  university_department_path(@university, @department)
  # => '/universities/:university_id/departments/:id'
Enter fullscreen mode Exit fullscreen mode
  • Para acessar os professores de um departamento específico:
  department_professors_path(@university, @department)
  # => '/universities/:university_id/departments/:department_id/professors'
Enter fullscreen mode Exit fullscreen mode
  • Para acessar o perfil de um professor:
  profile_professor_path(@university, @department, @professor) 
  # => '/universities/:university_id/departments/:department_id/professors/:id/profile'
Enter fullscreen mode Exit fullscreen mode

Dicas para Interpretação de Paths

  1. A ordem dos argumentos importa: Sempre forneça os IDs dos recursos pais antes dos filhos.
  2. Use rake routes: Esse comando exibe todas as rotas disponíveis e seus respectivos helpers.
  3. Analise a hierarquia: Cada recurso dentro de outro exige os IDs dos níveis superiores.
  4. 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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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'
Enter fullscreen mode Exit fullscreen mode

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')
Enter fullscreen mode Exit fullscreen mode

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!

Hostinger image

Get n8n VPS hosting 3x cheaper than a cloud solution

Get fast, easy, secure n8n VPS hosting from $4.99/mo at Hostinger. Automate any workflow using a pre-installed n8n application and no-code customization.

Start now

Top comments (0)

5 Playwright CLI Flags That Will Transform Your Testing Workflow

  • 0:56 --last-failed
  • 2:34 --only-changed
  • 4:27 --repeat-each
  • 5:15 --forbid-only
  • 5:51 --ui --headed --workers 1

Learn how these powerful command-line options can save you time, strengthen your test suite, and streamline your Playwright testing experience. Click on any timestamp above to jump directly to that section in the tutorial!

👋 Kindness is contagious

DEV shines when you're signed in, unlocking a customized experience with features like dark mode!

Okay