Routing in Rails
On Janeiro 18, 2022 by adminO que exatamente é roteamento?
Quando há uma requisição HTTP do usuário para a aplicação, ela deve ser direcionada para o controlador correto. Você pode imaginar um roteador como um recepcionista em quem você se conecta à pessoa certa para conversar.
Como é feito o roteamento em Ruby on Rails?
Em Rails, as rotas da sua aplicação vivem em config/routes.rb
. O roteador Rails reconhece URLs e os despacha para a ação de um controlador. Ele também pode gerar caminhos e URLs, evitando a necessidade de codificar strings hardcode em suas views. Vamos considerar uma aplicação para reservar quartos em diferentes Hotéis e dar uma olhada em como isso funciona.
Tipos de métodos de solicitação HTTP
A aplicação recebe uma solicitação HTTP que carrega consigo um método que poderia ser:
GET – Recuperar um recurso
POST – Criar um recurso
PUT – Atualizar completamente um recurso
PATCH – Atualizar parcialmente um recurso
DELETE – Apagar um recurso
Estes métodos determinam qual método de ação do controlador é chamado.
Descodificação da requisição http
Se a aplicação receber a requisição, GET /hotels/1
. O pedido é enviado para o controlador de hotéis show
ação com { id: '1' }
em params.
get '/hotels/:id', to: 'hotels#show'
>Similiarmente,
get '/hotels', to: 'hotels#index'get '/hotels/:id', to: 'hotels#show'get '/hotels/new', to: 'hotels#new'post '/hotels', to: 'hotels#create'get '/hotels/:id/edit', to: 'hotels#edit'put '/hotels/:id', to: 'hotels#update'delete '/hotels/:id', to: 'hotels#destroy'
TIP: Se você quiser listar todas as rotas da sua aplicação você pode usar rails routes
no seu terminal e se você quiser listar rotas de um recurso específico, você pode usar rails routes | grep hotel
. Isto irá listar todas as rotas do Hotel.
Definindo recursos
Como a recepcionista mantém um registo de todas as reservas, a aplicação também tem o seu próprio registo em config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Ao escrever resources :hotels
criamos todas as sete rotas diferentes na sua aplicação, todo o mapeamento para o controlador do Hotels como mencionado acima.
Se o seu controlador tem apenas algumas destas acções pode alterar a mesma com as seguintes palavras-chave.
A palavra-chave inclui apenas as acções mencionadas.resources :hotels, only:
Existe também a palavra-chave excepto para nomear as que não quer incluir.
resources :hotels, except:
>
Recursos únicos e múltiplos
Algumas vezes temos um único recurso ou seja, só temos de aceder a uma única página em vez de referenciar uma id. É quando usamos o termo singular, resource.
resource :hotels
>
Quando você tem que definir vários recursos,
resources :hotels, :rooms
que funciona da mesma forma que
resources :hotels,resources :rooms
Recursos aninhados
Algumas vezes temos rotas aninhadas, /hotels/:id/rooms
que são o resultado de recursos que são logicamente filhos de outros recursos. Por exemplo, suponha que sua aplicação inclua esses modelos:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
Nesse caso, declararemos nossos recursos dessa forma,
resources :hotels do resources :roomsend
Essa declaração nos ajuda a acessar as URLs aninhadas como /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
etc
Estudo Adicional
Se você quiser se aprofundar no roteamento, você pode se referir ao Rails Routing de fora em http://guides.rubyonrails.org/routing.html.
Cobrir Foto de Javier Allegue Barros em Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Deixe uma resposta