Roteamento Rails de fora para dentro – parte 1
1 A dupla finalidade do roteamento
Roteamento Rails é um mecanismo de encaminhamento bidirecional – como se você pudesse transformar isso em um papel, e depois cada papel de volta em árvore. Especificamente, que liga as solicitações HTTP recebidas para o código no controlador da sua aplicação, e ajuda a você gerar URLs sem ter que codificar as strings.
1.1 Conectando URLs com o código
Quando sua aplicação Rails recebe uma solicitação HTTP, fala
GET /patients/17
a engine de roteamento dentro do Rails é a parte do código que envia uma solicitação para o local apropriado na sua aplicação. Neste caso, a aplicação provavelmente executaria a ação show dentro do controlador patients, mostrando os detalhes do paciente cujo ID é 17.
1.2 Gerando URLs do código
O roteamento também funciona no caminho reverso. Se sua aplicação contem este código:
@patient = Patient.find(17) <%= link_to "Patient Record", patient_path(@patient) %> Então a engine de roteamento é a parte que traduz o link para a URL como http://example.com/patients/17. Usando o roteamento nesta forma, você pode reduzir a fragilidade da sua aplicação se comparada com uma aplicação com URLs codificada dificilmente, e torna o seu código facilmente de ser lido e entendido.
Patient necessita ser declarado como um recurso para que o estilo de tradução por rotas nomeadas possam estar disponíveis.
2 Rápido Tour de Routes.rb
Há dois componentes para roteamento no Rails: a própria engine de roteamento, que é fornecida como parte do Rails, e o arquivo config/routes.rb, que contém as rotas atuais que serão usadas pela sua aplicação. Aprender exatamente o que você pode colocar em routes.rb é o propósito principal deste guia, mas antes vamos obter uma rápida visão geral.
2.1 Processando o arquivo
No arquivo, routes.rb não é nada mais do que um grande bloco enviado para ActionController::Routing::Routes.draw. Junto com este bloco, você pode ter comentários, mas é provável que a maior parte do seu conteúdo será de linhas individuais de código – cada linha iniciando uma rota na sua aplicação. Você encontrará cinco tipos principais de conteúdo neste arquivo:
- Rotas RESTful
- Rotas Nomeadas
- Rotas Aninhadas
- Rotas Regulares
- Rotas Padrão
Cada um desses tipos de rotas serão cobertos em mais detalhes neste guia.
O arquivo routes.rb é processado de cima para baixo quando chega uma requisição. A requisição será executada na primeira combinação de rota. Se nenhuma rota combina, então o Rails retorna um status HTTP 404 ao chamador.
2.2 Rotas RESTful
Rotas RESTful tiram a vantagem da orientação built-in do REST do Rails para empacotar muitas das informações de roteamento em uma simples declaração. Uma rota RESTful se parece como esta:
map.resources :books 2.3 Rotas nomeadas
Rotas nomeadas da a você links legíveis no seu código, bem como manipulação nas solicitações recebidas. Veja aqui uma típica rota nomeada:
map.login '/login', :controller => 'sessions', :action => 'new' 2.4 Rotas aninhadas
Rotas aninhadas permite você declarar que um recurso está contido dentro de outro recurso. Você verá mais tarde como pode traduzir para as URLs e caminhos no seu código. Por exemplo, se sua aplicação incluir parts, cada uma das quais pertence a um assembly, você pode declarar esta rota aninhada como:
map.resources :assemblies do |assemblies| assemblies.resources :parts end 2.5 Rotas regulares
Em muitas aplicações, você verá roteamentos não RESTful, que conecta explicitamente cada parte da URL a uma ação em particular. Por exemplo,
map.connect 'parts/:number', :controller => 'inventory', :action => 'show' 2.6 Rotas padrão
As rotas padrão são a forma segura de capturar requisições sem outras formas de rotas. Muitas aplicações Rails contém este par de rotas como padrão:
map.connect ':controller/:action/:id' map.connect ':controller/:action/:id.:format' Estas rotas padrão são geradas automaticamente quando você cria uma nova aplicação Rails. Se você está usando roteamento RESTful para tudo na sua aplicação, você provavelmente precisará removê-la. Mas verifique se você não está usando rotas padrões antes de removê-las.

