© 2013 All rights reserved.
0

Routovani v Ruby on Rails I – routes.rb

Routování v Ruby on Rails funguje jako obousměrný proces. Dokáže vytvářet url adresy podle vytvořených pravidel a zpětně dokáže tyto adresy převést na sprváné volání controllerů a akcí.

V praxi si tohle můžeme představit následovně. Máme například adresu:

Routing engine se postará o to, že najde správný controller a správnou akci, podle tvaru url adresy, kam bude tento požadavek směrovat, a které bude volat.

V opačném případě bude funkce obdobná. Při volání url adresy:

bude vykládána správná adresa

Routes.rb

Soubor routes.rb slouží pro definování všech cest a adres (tras), které chcete v aplikaci používat.
Tyto adresy jsou uvedeny jako blok ActionController::Routing::Routes.draw.
Blok je aplikací zpracováván odshora směrem dolů a jednotlivé routy jsou poté používány v aplikaci.
Pokud jsou routy níže předefinovány, jsou aplikací přepsány.

Routes.rb může obsahovat několik druh rout:

  • Named Routes
  • Regular Routes
  • Default Routes
  • RESTful Routes
  • Nested Routes

V tomto, prvním, článku se podíváme na první dva typy rout. :

Named Routes

Jedná se o přímo pojmenované trasy, kdy si vytvoříme jak celou adresu pro použítí, tak přímo nadefinujeme, který kontroler a která akce se bude po zadání dané adresy volat.

Vytvoříme si například routu, která bude odkazovat na mapu webu:

Adresu potom můžeme jednoduše vyskládat například takto:

Po jejím zavolání se bude odkazovat přímo na sitemap_controller.rb ve kterém se zpracuje akce generate.

Regular Routes

Regular routes jsou podobné RestFul routám (na ty se podíváme příště), vlastně bych mohl říct, že se jedná o kombinaci RESTful rout a Named rout.

Umožňují nadefinovat si adresu, do které můžeme opět přímo nadefinovat volaný kontroler a akci, ovšem oproti Named routám navíc může adresa přebírat další parametry, které jsou dále zpracovávány a předávány.

Většina techto rout je možné nahradit RESTful routami, Regular routes spíše předefinovávají některé části RESTful rout.

Nejlepší bude uvést jednoduchý příklad:

Při volání se použije kontroler user_controller a volá se akce show, navíc je vytvořen parametr se jménem username. Na tento parametr musíme myslet i při volání:

Výchozí hodnoty

Do rout můžeme krom volaného kontroleru a akce nadefinovat výchozí hodnoty, které se budou předávat jako parametry. Tyto parametry budou poté obsaženy v poli params:

Po přístupu na tuto adresu se opět volá user_controller a metoda show, do které je předán jako parametr hodnota params[:username], ale krom tohoto parametru je předán automaticky ještě jeden parametr a to params[:type], který obsahuje hodnotu “man”.

 

Požadavky na parametry

Pro lepší rozhodnování směrování existuje možnost nadefinovat si v routách podmínku pro každý parametr. Tyto podmínky jsou uvozeny klíčem :requirements, který obsahuje pole podmínek:

V podmínce je přesně stanoveno, jaké hodnoty může proměnná obsahovat, a dle těchto podmínek se určí správný kontroler a akce. Podobné routy se tak mohou lišit jenom v různých podmínkách.

 

Podmínky v routách

Podobně jako požadavky na parametry, můžeme vytvořit podmínky pro celou routu. V současné době je podporována pouze podmínka :method , která rozhoduje o metodě přístupu:

 

Globbing

Globbing vytváří jakousi univerzální routu na základě určitěho požadavku. Nejlépe to bude vysvětleno zase na příkladu:

Nyní máme nadefinovanou trasu, která začíná řetězcem user/, ale může obsahovat libovolný počet dalších parametrů. Tyto parametry jsou přebrány a předány do params pole. Pokud například zadáme adresu /user/edit/zaachi/ budou všechny tyto parametry v poli params[:other]

 

Route with_options

Pokud máme několik podobných rout, které se liší jenom nepatrně, můžeme použít with_options, který shlukuje všechny podobné možnosti více rout:

Tímt si ušetříme zbytečné rozepisování jednotlivých rout, a můžeme jednoduše nadefinovat pro jeden kontroler více akcí pod různými trasami.

Default routes

Default routs jsou jakési výchozí trasy, které jsou použity v případě, že aplikace nenašla vhodnou routu, která by jí vyhovovala. Po vytvoření nového projektu většinou soubor routes.rb přímo některé defaultní routy obsahuje. Taková routa může vypada například takto:

Jsou uvedeny až na konci seznamu rout, aby byly zpracovány v případě že nebyla nalezena jiná routa.

Závěrem

Routování je důležitá součást vývoje v RoR. V dalším článku se podíváme především na RESTful routy, které jsou v RoR aplikacích asi nejpoužívanější.

Comments are closed for this page

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836