Routing in Rails
On Januar 18, 2022 by adminWas genau ist Routing?
Wenn es eine HTTP-Anfrage vom Benutzer an die Anwendung gibt, sollte sie an den richtigen Controller geleitet werden. Man kann sich einen Router wie eine Empfangsdame vorstellen, die einen mit dem richtigen Ansprechpartner verbindet.
Wie wird das Routing in Ruby on Rails durchgeführt?
In Rails befinden sich die Routen der Anwendung in config/routes.rb
. Der Rails-Router erkennt URLs und leitet sie an die Aktion eines Controllers weiter. Er kann auch Pfade und URLs generieren, so dass die Notwendigkeit besteht, Strings in Ihren Ansichten zu kodieren. Betrachten wir eine Anwendung zur Buchung von Zimmern in verschiedenen Hotels und schauen wir uns an, wie das funktioniert.
Arten von HTTP-Anforderungsmethoden
Die Anwendung empfängt eine HTTP-Anforderung, die eine Methode mit sich bringt, die sein könnte:
GET – Abrufen einer Ressource
POST – Erstellen einer Ressource
PUT – Vollständige Aktualisierung einer Ressource
PATCH – Teilweise Aktualisierung einer Ressource
DELETE – Löschen einer Ressource
Diese Methoden bestimmen, welche Controller-Aktionsmethode aufgerufen wird.
Dekodierung der http-Anfrage
Wenn die Anwendung die Anfrage erhält, GET /hotels/1
. Die Anfrage wird an die Aktion show
des Hotel-Controllers mit { id: '1' }
in params gesendet.
get '/hotels/:id', to: 'hotels#show'
Ähnlich,
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: Wenn Sie jemals alle Routen Ihrer Anwendung auflisten wollen, können Sie rails routes
auf Ihrem Terminal verwenden und wenn Sie Routen einer bestimmten Ressource auflisten wollen, können Sie rails routes | grep hotel
verwenden. Dies wird alle Routen des Hotels auflisten.
Definieren von Ressourcen
Wie die Rezeptionistin einen Datensatz aller Reservierungen hat, so hat auch die Anwendung ihren eigenen Datensatz in config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Durch das Schreiben von resources :hotels
erstellen wir alle sieben verschiedenen Routen in Ihrer Anwendung, die alle auf den Controller Hotels abgebildet werden, wie oben erwähnt.
Wenn Ihr Controller nur ein paar dieser Aktionen hat, können Sie diese mit den folgenden Schlüsselwörtern ändern.
Das Schlüsselwort umfasst nur die genannten Aktionen.resources :hotels, only:
Es gibt auch das Schlüsselwort except, um die zu benennen, die du nicht einbeziehen willst.
resources :hotels, except:
Einzelne und mehrere Ressourcen
Manchmal haben wir eine einzelne Ressource, d.h. wir müssen nur auf eine einzelne Seite zugreifen, anstatt eine ID zu referenzieren. In diesem Fall verwenden wir den singulären Begriff Ressource.
resource :hotels
Wenn Sie mehrere Ressourcen definieren müssen,
resources :hotels, :rooms
was genauso funktioniert wie
resources :hotels,resources :rooms
Verschachtelte Ressourcen
Manchmal haben wir verschachtelte Routen,/hotels/:id/rooms
die aus Ressourcen resultieren, die logischerweise Kinder anderer Ressourcen sind. Nehmen wir zum Beispiel an, deine Anwendung enthält diese Modelle:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
In diesem Fall werden wir unsere Ressourcen so deklarieren,
resources :hotels do resources :roomsend
Diese Deklaration hilft uns, auf die verschachtelten URLs wie /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
usw. zuzugreifen
Weiteres Studium
Wenn du tiefer in das Routing einsteigen willst, kannst du dich auf Rails Routing from the outside in http://guides.rubyonrails.org/routing.html beziehen.
Coverfoto von Javier Allegue Barros auf Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Schreibe einen Kommentar