Rutare în Rails
On ianuarie 18, 2022 by adminCe este mai exact rutarea?
Când există o cerere HTTP de la utilizator către aplicație, aceasta trebuie să fie direcționată către controlerul potrivit. Vă puteți imagina un router ca pe un recepționer la care vă conectează la persoana potrivită cu care să vorbiți.
Cum se face rutarea în Ruby on Rails?
În Rails, rutele aplicației dvs. trăiesc în config/routes.rb
. Routerul Rails recunoaște URL-urile și le expediază către o acțiune a unui controler. De asemenea, poate genera căi și URL-uri, evitând necesitatea de a codifica șiruri de caractere în vizualizările dvs. Să luăm în considerare o aplicație pentru a rezerva camere în diferite hoteluri și să vedem cum funcționează acest lucru.
Tipuri de metode de solicitare HTTP
Aplicația primește o solicitare HTTP care poartă cu ea o metodă care ar putea fi:
GET – Recuperează o resursă
POST – Creează o resursă
PUT – Actualizează complet o resursă
PATCH – Actualizează parțial o resursă
DELETE – Șterge o resursă
Aceste metode determină ce metodă de acțiune a controlerului este apelată.
Decodificarea cererii http
Dacă aplicația primește cererea, GET /hotels/1
. Solicitarea este trimisă către acțiunea show
a controlerului de hoteluri cu { id: '1' }
în params.
get '/hotels/:id', to: 'hotels#show'
În mod similar,
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: Dacă doriți vreodată să listați toate rutele aplicației dvs. puteți utiliza rails routes
pe terminal, iar dacă doriți să listați rutele unei anumite resurse, puteți utiliza rails routes | grep hotel
. Aceasta va lista toate rutele Hotelului.
Definirea resurselor
La fel cum recepționerul deține o evidență a tuturor rezervărilor, și aplicația are propria sa evidență în config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Scriind resources :hotels
creăm toate cele șapte rute diferite în aplicația dumneavoastră, toate acestea fiind corelate cu controlerul Hotels, așa cum am menționat mai sus.
Dacă controlerul dvs. are doar câteva dintre aceste acțiuni, puteți modifica același lucru cu următoarele cuvinte cheie.
Cuvântul cheie include doar acțiunile menționate.resources :hotels, only:
Există și cuvântul cheie except pentru a le numi pe cele pe care nu doriți să le includeți.
resources :hotels, except:
Resurse unice și multiple
Câteodată avem o singură resursă, adică trebuie să accesăm doar o singură pagină în loc să facem referire la un id. Atunci folosim termenul singular, resursă.
resource :hotels
Când trebuie să definim mai multe resurse,
resources :hotels, :rooms
care funcționează la fel ca
resources :hotels,resources :rooms
Resurse imbricate
Câteodată avem rute imbricate, /hotels/:id/rooms
care sunt rezultatul unor resurse care sunt logic copii ai altor resurse. De exemplu, să presupunem că aplicația dvs. include aceste modele:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
În acest caz, vom declara resursele noastre astfel,
resources :hotels do resources :roomsend
Această declarație ne ajută să accesăm URL-urile imbricate, cum ar fi /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
etc
Studiu suplimentar
Dacă doriți să aprofundați rutele, puteți consulta Rails Routing from the outside in http://guides.rubyonrails.org/routing.html.
Fotografie de copertă de Javier Allegue Barros pe Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
.
Lasă un răspuns