Routing a Railsben
On január 18, 2022 by adminMi is pontosan a routing?
Amikor egy HTTP kérés érkezik a felhasználótól az alkalmazáshoz, azt a megfelelő vezérlőhöz kell irányítani. Az útválasztót úgy képzelhetjük el, mint egy recepcióst, aki összeköt a megfelelő emberrel, akivel beszélhetünk.
Hogyan történik az útválasztás a Ruby on Railsben?
A Railsben az alkalmazás útvonalai a config/routes.rb
-ben élnek. A Rails útválasztó felismeri az URL-eket, és elküldi őket egy vezérlő akciójához. Az útvonalakat és URL-eket is képes generálni, így elkerülhető a karakterláncok keménykódolása a nézetekben. Vegyünk egy olyan alkalmazást, amely különböző szállodákban foglal szobákat, és nézzük meg, hogyan működik ez.
A HTTP-kérelmezési módszerek típusai
Az alkalmazás egy HTTP-kérelmet kap, amely egy módszert hordoz magában, amely lehet:
GET – erőforrás lekérdezése
POST – erőforrás létrehozása
PUT – erőforrás teljes frissítése
PATCH – erőforrás részleges frissítése
DELETE – erőforrás törlése
Ezek a módszerek határozzák meg, hogy melyik vezérlő műveleti módszerét hívja meg.
A http kérés dekódolása
Ha az alkalmazás megkapja a kérést, GET /hotels/1
. A kérést a hotelek vezérlőjének show
akciójára küldi a { id: '1' }
paraméterekkel.
get '/hotels/:id', to: 'hotels#show'
Hasonlóképpen,
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'
TIPP: Ha valaha az alkalmazás összes útvonalát ki akarjuk listázni, akkor a rails routes
terminálon használhatjuk, ha pedig egy adott erőforrás útvonalait akarjuk listázni, akkor a rails routes | grep hotel
-t használhatjuk. Ez a Hotel összes útvonalát kilistázza.
Erőforrások definiálása
Mint ahogy a recepciós is nyilvántartást vezet az összes foglalásról, az alkalmazásnak is megvan a saját nyilvántartása a config/routes.rb
-ben.
Rails.application.routes.draw do resources :hotelsend
A resources :hotels
írásával létrehozzuk mind a hét különböző útvonalat az alkalmazásban, amelyek mind a Hotels vezérlőhöz kapcsolódnak, ahogy fentebb említettük.
Ha a vezérlődnek csak néhány ilyen művelete van, akkor ugyanezt a következő kulcsszavakkal módosíthatod.
A kulcsszó csak az említett műveleteket tartalmazza.resources :hotels, only:
Létezik a except kulcsszó is, amellyel megnevezhetjük azokat, amelyeket nem akarunk bevonni.
resources :hotels, except:
Egy és több erőforrás
Néha egyetlen erőforrásunk van, azaz csak egyetlen oldalhoz kell hozzáférnünk az id-re való hivatkozás helyett. Ilyenkor egyes számban használjuk az erőforrás kifejezést.
resource :hotels
Amikor több erőforrást kell definiálnunk,
resources :hotels, :rooms
ami ugyanúgy működik, mint
resources :hotels,resources :rooms
Beágyazott erőforrások
Néha vannak beágyazott útvonalak,/hotels/:id/rooms
amelyek olyan erőforrásokból adódnak, amelyek logikailag más erőforrások gyermekei. Tegyük fel például, hogy az alkalmazásunk ezeket a modelleket tartalmazza:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
Az erőforrásainkat ebben az esetben így fogjuk deklarálni,
resources :hotels do resources :roomsend
Ez a deklaráció segít elérni a beágyazott URL-eket, mint például /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
stb
További tanulmányozás
Ha mélyebben bele akarunk ásni a routingba, akkor a Rails Routing kívülről http://guides.rubyonrails.org/routing.html című fejezetben olvashatunk.
Cover Photo by Javier Allegue Barros on Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Vélemény, hozzászólás?