Routing in Rails
On januari 18, 2022 by adminWat is routing precies?
Wanneer er een HTTP-verzoek van de gebruiker naar de applicatie, moet het worden doorgestuurd naar de juiste controller. Je kunt je een router voorstellen als een receptionist bij wie je wordt doorverbonden met de juiste persoon om mee te praten.
Hoe wordt routing gedaan in Ruby on Rails?
In Rails staan de routes van je applicatie in config/routes.rb
. De Rails-router herkent URL’s en stuurt ze door naar de actie van een controller. Het kan ook paden en URL’s genereren, het vermijden van de noodzaak om hardcode strings in uw standpunten. Laten we eens kijken naar een toepassing om kamers te boeken in verschillende hotels en hoe dit werkt.
Soorten HTTP request methods
De applicatie ontvangt een HTTP request dat een methode met zich meedraagt die kan zijn:
GET – Haalt een resource op
POST – Maakt een resource
PUT – Werkt een resource volledig bij
PATCH – Werkt een resource gedeeltelijk bij
DELETE – Verwijdert een resource
Deze methodes bepalen welke controller actie methode wordt aangeroepen.
Decodering van het http verzoek
Als de applicatie het verzoek ontvangt, GET /hotels/1
. Het verzoek wordt verzonden naar de hotel controller’s show
actie met { id: '1' }
in params.
get '/hotels/:id', to: 'hotels#show'
Ook
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: Als u ooit een lijst van alle routes van uw applicatie wilt, kunt u rails routes
op uw terminal gebruiken en als u een lijst van routes van een specifieke bron wilt, kunt u rails routes | grep hotel
gebruiken. Dit zal een lijst van alle routes van Hotel.
Definiëren van bronnen
Zoals de receptioniste een record heeft van alle reserveringen, heeft de applicatie ook zijn eigen record in config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Door het schrijven van resources :hotels
creëren we alle zeven verschillende routes in uw applicatie, alle mappend naar de Hotels controller zoals hierboven vermeld.
Als uw controller slechts een paar van deze acties heeft, kunt u hetzelfde wijzigen met de volgende trefwoorden.
Het trefwoord omvat alleen de genoemde acties.resources :hotels, only:
Er is ook het trefwoord except om de acties te noemen die je niet wilt opnemen.
resources :hotels, except:
Enkelvoudige en meervoudige bronnen
Soms hebben we een enkelvoudige bron, d.w.z. dat we slechts toegang hebben tot een enkele pagina in plaats van te verwijzen naar een id. Dan gebruiken we de enkelvoudige term, resource.
resource :hotels
Wanneer je meerdere resources moet definiëren,
resources :hotels, :rooms
wat hetzelfde werkt als
resources :hotels,resources :rooms
Geneste Resources
Soms hebben we geneste routes, /hotels/:id/rooms
die het resultaat zijn van resources die logischerwijs kinderen van andere resources zijn. Stel bijvoorbeeld dat je applicatie deze modellen bevat:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
In dat geval declareren we onze resources op deze manier,
resources :hotels do resources :roomsend
Deze declaratie helpt ons toegang te krijgen tot de geneste URL’s zoals /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
enz
Verdere studie
Als je dieper in routing wilt duiken, kun je Rails Routing van buitenaf bekijken http://guides.rubyonrails.org/routing.html.
Omslagfoto door Javier Allegue Barros op Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Geef een antwoord