Routage dans Rails
On janvier 18, 2022 by adminQu’est-ce que le routage exactement ?
Quand il y a une requête HTTP de l’utilisateur vers l’application, elle doit être dirigée vers le bon contrôleur. Vous pouvez imaginer un routeur comme une réceptionniste à qui vous connecte à la bonne personne à qui parler.
Comment le routage est fait dans Ruby on Rails?
Dans Rails, les routes de votre application vivent dans config/routes.rb
. Le routeur de Rails reconnaît les URL et les dispatche vers l’action d’un contrôleur. Il peut également générer des chemins et des URL, évitant ainsi de devoir coder en dur des chaînes de caractères dans vos vues. Considérons une application permettant de réserver des chambres dans différents Hôtels et regardons comment cela fonctionne.
Types de méthodes de requête HTTP
L’application reçoit une requête HTTP qui emporte avec elle une méthode qui peut être :
GET – Récupérer une ressource
POST – Créer une ressource
PUT – Mettre à jour complètement une ressource
PATCH – Mettre à jour partiellement une ressource
DELETE – Supprimer une ressource
Ces méthodes déterminent quelle méthode d’action du contrôleur est appelée.
Décodage de la requête http
Si l’application reçoit la requête, GET /hotels/1
. La requête est envoyée à l’action show
du contrôleur d’hôtels avec { id: '1' }
dans les paramètres.
get '/hotels/:id', to: 'hotels#show'
De même,
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 jamais vous voulez lister toutes les routes de votre application, vous pouvez utiliser rails routes
sur votre terminal et si vous voulez lister les routes d’une ressource spécifique, vous pouvez utiliser rails routes | grep hotel
. Ceci listera toutes les routes de Hotel.
Définition des ressources
Comme la réceptionniste détient un enregistrement de toutes les réservations, l’application aussi a son propre enregistrement dans config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
En écrivant resources :hotels
nous créons les sept routes différentes dans votre application, toutes mappant vers le contrôleur Hotels comme mentionné ci-dessus.
Si votre contrôleur n’a que quelques-unes de ces actions, vous pouvez modifier la même chose avec les mots-clés suivants.
Le mot-clé ne comprend que les actions mentionnées.resources :hotels, only:
Il y a aussi le mot-clé except pour nommer celles que vous ne voulez pas inclure.
resources :hotels, except:
Ressources uniques et multiples
Parfois nous avons une ressource unique c’est-à-dire que nous devons seulement accéder à une seule page au lieu de référencer un id. C’est alors que nous utilisons le terme singulier, ressource.
resource :hotels
Lorsque vous devez définir des ressources multiples,
resources :hotels, :rooms
qui fonctionne de la même manière que
resources :hotels,resources :rooms
Ressources imbriquées
Parfois, nous avons des routes imbriquées, /hotels/:id/rooms
qui sont le résultat de ressources qui sont logiquement enfants d’autres ressources. Par exemple, supposons que votre application comprend ces modèles :
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
Dans ce cas, nous déclarerons nos ressources de cette façon,
resources :hotels do resources :roomsend
Cette déclaration nous aide à accéder aux URL imbriquées telles que /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
etc
Étude plus approfondie
Si vous voulez creuser plus profondément dans le routage, vous pouvez vous référer à Rails Routing from the outside in http://guides.rubyonrails.org/routing.html.
Photo de couverture par Javier Allegue Barros sur Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
.
Laisser un commentaire