Routing i Rails
On januari 18, 2022 by adminVad exakt är routing?
När användaren skickar en HTTP-förfrågan till applikationen ska den dirigeras till rätt controller. Du kan föreställa dig en router som en receptionist på som kopplar dig till rätt person att prata med.
Hur görs routing i Ruby on Rails?
I Rails finns applikationens rutter i config/routes.rb
. Rails-routern känner igen webbadresser och skickar dem till en controllers åtgärd. Den kan också generera sökvägar och URL:er, vilket gör att du slipper hårdkoda strängar i dina vyer. Låt oss ta en applikation för att boka rum på olika hotell och ta en titt på hur detta fungerar.
Typer av HTTP-förfrågningsmetoder
Programmet tar emot en HTTP-förfrågan som har med sig en metod som kan vara:
GET – Hämta en resurs
POST – Skapa en resurs
PUT – Uppdatera en resurs fullständigt
PATCH – Uppdatera en resurs delvis
DELETE – Ta bort en resurs
De här metoderna bestämmer vilken handlingsmetod för kontrollern som anropas.
Avkodning av http-förfrågan
Om programmet tar emot förfrågan, GET /hotels/1
. Begäran skickas till hotellkontrollantens show
åtgärd med { id: '1' }
i params.
get '/hotels/:id', to: 'hotels#show'
Samma sak,
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: Om du någonsin vill lista alla rutter i ditt program kan du använda rails routes
på din terminal och om du vill lista rutter för en specifik resurs kan du använda rails routes | grep hotel
. Detta kommer att lista alla vägar för Hotel.
Definiera resurser
Som receptionisten har ett register över alla bokningar har även programmet ett eget register i config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Genom att skriva resources :hotels
skapar vi alla sju olika vägar i ditt program, som alla mappas till hotellkontrollern som nämnts ovan.
Om din styrenhet bara har några få av dessa åtgärder kan du ändra dem med följande nyckelord:
Nyckelordet endast omfattar endast de åtgärder som nämns.resources :hotels, only:
Det finns också nyckelordet utom för att namnge de som du inte vill inkludera.
resources :hotels, except:
Enstaka och flera resurser
Ibland har vi en enda resurs dvs. vi behöver bara få tillgång till en enda sida i stället för att hänvisa till ett id. Det är då vi använder singulära termen, resurs.
resource :hotels
När du måste definiera flera resurser,
resources :hotels, :rooms
vilket fungerar på samma sätt som
resources :hotels,resources :rooms
Nested Resources
Undertiden har vi nested routes, /hotels/:id/rooms
som är ett resultat av resurser som logiskt sett är barn till andra resurser. Anta till exempel att din applikation innehåller dessa modeller:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
I så fall kommer vi att deklarera våra resurser på följande sätt,
resources :hotels do resources :roomsend
Denna deklaration hjälper oss att få tillgång till de nästlade URL:erna som /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
etc
Vidare studier
Om du vill fördjupa dig i routning kan du läsa Rails Routing from the outside in http://guides.rubyonrails.org/routing.html.
Omslagsbild av Javier Allegue Barros på Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Lämna ett svar