ThuisBalletje
TrainingenBalletje
ConsultancyBalletje
Blog Balletje
Named Routes
22-01-2008

Vast wennen aan REST routes

Al bezig met REST? Kan het je van harte aanbevelen. Al kan ik me voorstellen dat het intimiderend kan zijn als je net met rails begint. Waar je dus mee kan starten is named routes. Je bent dan in ieder geval met de manier van routing bezig die we ook bij REST gebruiken.


Standaard vallen we terug op de default route als we zelf niets definieren:

map.connect ':controller/:action/:id'

En dat werkt prima.

Maar een named route bespaart nog al wat tikwerk en we kunnen bovendien vast wennen aan REST routes en dat is mooi meegenomen.

Stel dat we de volgende link hebben in de view:

link_to 'Admins', :controller => 'admins', :action => 'index'

We laten direct de named route versie zien voor het verschil:

link_to 'Admins', admins_path

En dat scheelt behoorlijk. En we definieren dat als volgt in config/routes.rb

map.admins 'admins', :controller => 'admins', :action => 'index'

Nou belangrijk hier is de groene tekst die jij dus bepaalt voor de naam van de route. Het gedeelte daarna, hier ook admins, is datgene wat je wil laten zien in de url. We gaan nu ook nog een route aanmaken voor het tonen van een admin zodat je op het gebied van routing dit direct op je eigen app kan toepassen. Of pas bij het aanmaken van een nieuwe controller. Het voordeel is dat je de routing in REST direct zal herkennen. De route voor wijzigen is als volgt:

map.toon_admin 'admin/:id',

:controller => 'admins',

:action => 'toon'

En de link_to ziet er als volgt uit:

link_to 'Toon Admin', toon_admin_path( admin )

In plaats van het veel langere:

link_to 'Toon Admin',

:controller => 'admins',

:action => 'toon',

:id => admin

Het voordeel van een named route is ook dat deze wat sneller uitgevoerd kan worden. Dat komt omdat alles al bepaalt is in de route. De route hoeft als het ware niet door alle routes te lopen om uiteindelijk aan te komen bij de default route. Wat je wel ziet is dat je de route zelf moet definieren. En dat is nou ook het mooie aan REST, namelijk dat al die gegenereerde routes gratis zijn. Rails doet dat voor je met:

map.resources :gebruikers

En dit levert onder andere de volgende routes op:

gebruikers_path

gebruiker_path( id )

new_gebruiker_path

edit_gebruiker_path( id )

Het verschil met het voorbeeld hierboven is dat het in het engels is, maar verder wordt alles automatich aangemaakt. Dus REST routes geeft de programmeur consistente routes voor in zijn applicatie die hetzelfde zijn voor elk model behalve de naam natuurlijk. Dus voor bijvoorbeeld het model Bedrijf zou dit de volgende routes opleveren:

map.resources :bedrijven

En dit geeft deze routes:

bedrijven_path

bedrijf_path( id )

new_bedrijf_path

edit_bedrijf_path( id )