Enrutamiento en Rails
On enero 18, 2022 by admin¿Qué es exactamente el enrutamiento?
Cuando hay una petición HTTP del usuario a la aplicación, debe ser dirigida al controlador correcto. Puedes imaginarte un enrutador como un recepcionista que te conecta con la persona adecuada para hablar.
¿Cómo se hace el enrutamiento en Ruby on Rails?
En Rails, las rutas de tu aplicación viven en config/routes.rb
. El enrutador de Rails reconoce las URLs y las envía a la acción de un controlador. También puede generar rutas y URLs, evitando la necesidad de codificar cadenas en las vistas. Consideremos una aplicación para reservar habitaciones en diferentes hoteles y veamos cómo funciona.
Tipos de métodos de petición HTTP
La aplicación recibe una petición HTTP que lleva consigo un método que puede ser:
GET – Recuperar un recurso
POST – Crear un recurso
PUT – Actualizar completamente un recurso
PATCH – Actualizar parcialmente un recurso
DELETE – Eliminar un recurso
Estos métodos determinan qué método de acción del controlador se llama.
Decodificación de la petición http
Si la aplicación recibe la petición, GET /hotels/1
. La petición es enviada a la acción show
del controlador de hoteles con { id: '1' }
en params.
get '/hotels/:id', to: 'hotels#show'
Similarmente,
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: Si alguna vez quieres listar todas las rutas de tu aplicación puedes usar rails routes
en tu terminal y si quieres listar las rutas de un recurso específico, puedes usar rails routes | grep hotel
. Esto listará todas las rutas del Hotel.
Definiendo recursos
Al igual que la recepcionista tiene un registro de todas las reservas, la aplicación también tiene su propio registro en config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Escribiendo resources :hotels
creamos las siete rutas diferentes en su aplicación, todas mapeadas al controlador de Hoteles como se ha mencionado anteriormente.
Si tu controlador tiene sólo algunas de estas acciones puedes alterar las mismas con las siguientes palabras clave.
La palabra clave sólo incluye sólo las acciones mencionadas.resources :hotels, only:
También está la palabra clave except para nombrar las que no quieres incluir.
resources :hotels, except:
Recursos singulares y múltiples
A veces tenemos un único recurso es decir, sólo tenemos que acceder a una única página en lugar de referenciar un id. Es entonces cuando utilizamos el término singular, recurso.
resource :hotels
Cuando tenemos que definir múltiples recursos,
resources :hotels, :rooms
que funciona igual que
resources :hotels,resources :rooms
Recursos anidados
A veces tenemos rutas anidadas, /hotels/:id/rooms
que son el resultado de recursos que son lógicamente hijos de otros recursos. Por ejemplo, supongamos que nuestra aplicación incluye estos modelos:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
En cuyo caso declararemos nuestros recursos de esta manera,
resources :hotels do resources :roomsend
Esta declaración nos ayuda a acceder a las URLs anidadas como /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
etc
Estudio adicional
Si quieres profundizar en el enrutamiento, puedes consultar Rails Routing from the outside en http://guides.rubyonrails.org/routing.html.
Foto de portada de Javier Allegue Barros en Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Deja una respuesta