Routing in Rails
Il Gennaio 18, 2022 da adminCos’è esattamente il routing?
Quando c’è una richiesta HTTP dall’utente all’applicazione, dovrebbe essere indirizzata al giusto controller. Puoi immaginare un router come un centralinista che ti collega alla persona giusta con cui parlare.
Come si fa il routing in Ruby on Rails?
In Rails, le rotte della tua applicazione vivono in config/routes.rb
. Il router di Rails riconosce gli URL e li invia all’azione di un controller. Può anche generare percorsi e URL, evitando la necessità di inserire stringhe hardcode nelle vostre viste. Consideriamo un’applicazione per prenotare camere in diversi hotel e diamo un’occhiata a come funziona.
Tipi di metodi di richiesta HTTP
L’applicazione riceve una richiesta HTTP che porta con sé un metodo che potrebbe essere:
GET – Recupera una risorsa
POST – Crea una risorsa
PUT – Aggiorna completamente una risorsa
PATCH – Aggiorna parzialmente una risorsa
DELETE – Elimina una risorsa
Questi metodi determinano quale metodo di azione del controller viene chiamato.
Decodifica della richiesta http
Se l’applicazione riceve la richiesta, GET /hotels/1
. La richiesta viene inviata all’azione show
del controllore Hotel con { id: '1' }
nei params.
get '/hotels/:id', to: 'hotels#show'
Similmente,
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: Se vuoi elencare tutti i percorsi della tua applicazione puoi usare rails routes
sul tuo terminale e se vuoi elencare i percorsi di una risorsa specifica, puoi usare rails routes | grep hotel
. Questo elencherà tutte le rotte di Hotel.
Definizione delle risorse
Come il receptionist tiene un record di tutte le prenotazioni, anche l’applicazione ha il suo record in config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Scrivendo resources :hotels
creiamo tutte e sette le diverse rotte nella tua applicazione, tutte mappate al controller Hotel come detto sopra.
Se il tuo controller ha solo alcune di queste azioni puoi modificare lo stesso con le seguenti parole chiave.
La parola chiave include solo le azioni menzionate.resources :hotels, only:
C’è anche la parola chiave tranne per nominare quelle che non vuoi includere.
resources :hotels, except:
Risorse singole e multiple
A volte abbiamo una singola risorsa, cioè dobbiamo accedere solo a una singola pagina invece di fare riferimento a un id. Questo è quando usiamo il termine singolare, risorsa.
resource :hotels
Quando devi definire risorse multiple,
resources :hotels, :rooms
che funziona come
resources :hotels,resources :rooms
Risorse annidate
A volte abbiamo percorsi annidati, /hotels/:id/rooms
che sono il risultato di risorse che sono logicamente figli di altre risorse. Per esempio, supponiamo che la vostra applicazione includa questi modelli:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
In tal caso dichiareremo le nostre risorse in questo modo,
resources :hotels do resources :roomsend
Questa dichiarazione ci aiuta ad accedere agli URL annidati come /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
ecc
Ulteriori studi
Se volete scavare più a fondo nel routing, potete fare riferimento a Rails Routing dall’esterno in http://guides.rubyonrails.org/routing.html.
Foto di copertina di Javier Allegue Barros su Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Lascia un commento