Směrování v Rails
On 18 ledna, 2022 by adminCo přesně je směrování?
Pokud uživatel pošle do aplikace požadavek HTTP, měl by být přesměrován na správný kontrolér. Směrovač si můžete představit jako recepčního na recepci, který vás spojí se správnou osobou, s níž máte mluvit.
Jak se směrování provádí v Ruby on Rails?
V Rails jsou trasy vaší aplikace umístěny v config/routes.rb
. Směrovač Rails rozpoznává adresy URL a odesílá je do akce kontroléru. Dokáže také generovat cesty a adresy URL, čímž se vyhnete nutnosti zadávat řetězce v pohledech natvrdo. Uvažujme aplikaci pro rezervaci pokojů v různých hotelech a podívejme se, jak to funguje.
Typy metod požadavků HTTP
Aplikace obdrží požadavek HTTP, který s sebou nese metodu, kterou může být:
GET – Získání zdroje
POST – Vytvoření zdroje
PUT – Úplná aktualizace zdroje
PATCH – Částečná aktualizace zdroje
DELETE – Odstranění zdroje
Tyto metody určují, která metoda akce řadiče bude zavolána.
Dekódování http požadavku
Pokud aplikace obdrží požadavek, GET /hotels/1
. Požadavek je odeslán na akci kontroléru hotelu show
s { id: '1' }
v parametrech.
get '/hotels/:id', to: 'hotels#show'
Podobně,
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: Pokud někdy chcete vypsat všechny trasy vaší aplikace, můžete na terminálu použít rails routes
a pokud chcete vypsat trasy určitého zdroje, můžete použít rails routes | grep hotel
. Tím se zobrazí seznam všech tras Hotelu.
Definování zdrojů
Podobně jako recepční má záznam o všech rezervacích, i aplikace má svůj vlastní záznam v config/routes.rb
.
Rails.application.routes.draw do resources :hotelsend
Zapsáním resources :hotels
vytvoříme ve své aplikaci všech sedm různých tras, které se mapují na kontrolér Hotely, jak bylo uvedeno výše.
Pokud váš kontrolér obsahuje pouze několik z těchto akcí, můžete je změnit pomocí následujících klíčových slov.
Klíčové slovo obsahuje pouze zmíněné akce.resources :hotels, only:
Existuje také klíčové slovo except pro pojmenování těch, které nechcete zahrnout.
resources :hotels, except:
Jednotlivé a vícenásobné zdroje
Někdy máme jediný zdroj, tj. musíme přistupovat pouze k jedné stránce místo odkazu na id. Tehdy používáme singulární termín, resource.
resource :hotels
Když musíme definovat více zdrojů,
resources :hotels, :rooms
což funguje stejně jako
resources :hotels,resources :rooms
Vnořené zdroje
Někdy máme vnořené trasy, /hotels/:id/rooms
které jsou výsledkem zdrojů, které jsou logicky potomky jiných zdrojů. Předpokládejme, že vaše aplikace obsahuje například tyto modely:
class Hotel < ApplicationRecord has_many :roomsendclass Room < ApplicationRecord belongs_to :hotelend
V takovém případě budeme naše zdroje deklarovat takto,
resources :hotels do resources :roomsend
Tato deklarace nám pomůže přistupovat k vnořeným adresám URL, jako jsou /hotels/:id/rooms
, /hotels/:id/rooms/:id
, /hotels/:id/rooms/new
atd
Další studium
Pokud se chcete směrováním zabývat hlouběji, můžete se podívat do knihy Rails směrování zvenčí http://guides.rubyonrails.org/routing.html.
Obálkové foto: Javier Allegue Barros na Unsplash (https://unsplash.com/photos/C7B-ExXpOIE)
Napsat komentář