Reititys Railsissa
On 18 tammikuun, 2022 by adminMitä reititys tarkalleen ottaen on?
Kun käyttäjältä tulee HTTP-pyyntö sovellukseen, se tulee ohjata oikealle kontrollerille. Voit kuvitella reitittimen kuin vastaanottovirkailijan, joka yhdistää sinut oikealle henkilölle.
Miten reititys tehdään Ruby on Railsissa?
Railsissa sovelluksesi reitit asuvat config/routes.rb
:ssä. Rails-reititin tunnistaa URL-osoitteet ja lähettää ne kontrollerin toimintaan. Se voi myös luoda polkuja ja URL-osoitteita, jolloin vältytään kovakoodattavilta merkkijonoilta näkymissäsi. Tarkastellaan sovellusta, jolla varataan huoneita eri hotelleista, ja katsotaan, miten tämä toimii.
HTTP-pyyntömetodien tyypit
Sovellus vastaanottaa HTTP-pyynnön, joka kuljettaa mukanaan metodin, joka voi olla:
GET – Resurssin hakeminen
POST – Resurssin luominen
PUT – Resurssin täydellinen päivittäminen
PATCH – Resurssin osittainen päivittäminen
DELETE – Resurssin poistaminen
Nämä metodit määräävät, mitä ohjaimen toimintametodia kutsutaan.
http-pyynnön purkaminen
Jos sovellus vastaanottaa pyynnön, GET /hotels/1
. Pyyntö lähetetään hotellien kontrollerin show
-toimintoon, jonka paramsissa on { id: '1' }
.
get '/hotels/:id', to: 'hotels#show'
Samoin,
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: Jos joskus haluat listata kaikki sovelluksesi reitit, voit käyttää rails routes
päätelaitteessa, ja jos haluat listata tietyn resurssin reitit, voit käyttää rails routes | grep hotel
. Tämä listaa kaikki Hotellin reitit.
Resurssien määrittely
Niin kuin vastaanottovirkailijalla on tietue kaikista varauksista, myös sovelluksella on oma tietueensa kohdassa config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Kirjoittamalla resources :hotels
luomme sovellukseesi kaikki seitsemän erilaista reittiä, jotka kaikki kartoittavat Hotellit-ohjaimen kuten edellä mainittiin.
Jos kontrollerissasi on vain muutama näistä toiminnoista, voit muuttaa samaa seuraavilla avainsanoilla.
Avainsana vain sisältää vain mainitut toiminnot.resources :hotels, only:
On myös avainsana except, jolla voit nimetä ne, joita et halua sisällyttää.
resources :hotels, except:
Yksittäiset ja useat resurssit
Joskus meillä on yksi resurssi ts. meidän täytyy käyttää vain yhtä sivua sen sijaan, että viittaisimme id:hen. Silloin käytämme yksikäsitteistä termiä resurssi.
resource :hotels
Kun joudumme määrittelemään useita resursseja,
resources :hotels, :rooms
mikä toimii samalla tavalla kuin
resources :hotels,resources :rooms
Sisäkkäiset resurssit
Joskus meillä on sisäkkäisiä reittejä,/hotels/:id/rooms
jotka ovat seurausta resursseista,/hotels/:id/rooms
jotka ovat loogisesti toisten resurssien lapsia. Oletetaan esimerkiksi, että sovelluksesi sisältää nämä mallit:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
Tällöin ilmoitamme resurssimme näin,
resources :hotels do resources :roomsend
Tämän ilmoituksen avulla pääsemme käsiksi sisäkkäisiin URL-osoitteisiin, kuten /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
jne
Jatko-opiskelu
Jos haluat perehtyä syvällisemmin reititykseen, voit tutustua Railsin reititykseen ulkoa päin http://guides.rubyonrails.org/routing.html.
Cover Photo by Javier Allegue Barros on Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Vastaa