· 3 min read

Routes in Rails 3

Die neue DSL ist insgesamt sauberer aufgebaut. Eine typische RESTful Route in Rails 3 könnte folgendermaßen Aussehen:

[ruby] resources :products do resource :category

member do post :short end

collection do get :long end end [/ruby]

So würde die es z.Z. in Rails 2 aussehen:

[ruby] map.resources :products, :member => {:short => :post}, :collection => {:long => :get} do |products| products.resource :category end [/ruby]

Wie man sieht ist die neue Schreibform viel lesbarer und somit einfacher zu pflegen.

Im folgenden werden wir verschiedene Beispiele für die unterschiedlichen Route-Typen  in Rails 3 zeigen

Default Route

Die Default Route in Rails 3 ist nun explizieter und die Klammern verdeutlichen die optionalen Parameter:

[ruby] match ’/:controller(/:action(/:id))’ [/ruby]

Reguläre Routen

Anstatt verschiedene Parameter anzugeben, kann man nun die Angaben “zusammenfassen” ("catalog#view”):

[ruby] match ‘products/:id’ => ‘catalog#view’ [/ruby]

Das Vereinfacht die Routenerstellung. Die Beispielroute wie sie heute geschrieben werden würde:

[ruby] map.connect ‘products/:id’, :controller => ‘catalog’, :action => ‘view’ [/ruby]

Named Routen

Die Unterscheidung zwischen regulären und named Routen ist schwieriger im Vergleich zu Rails 2. Der einzige Unterschied ist, dass bei regulären Routen im ersten Argument ein Parameter zu finden ist.

[ruby] match ‘logout’, :to => ‘sessions#destroy’ [/ruby]

Auch in diesem Fall ist die neue Version sauberer und lesbarer als in Rails 2: [ruby] map.logout ‘/logout’, :controller => ‘sessions’, :action => ‘destroy’ [/ruby]

Leere Route

Die Startseite einer Rails-App wird durch eine “leere” Route konfiguriert. Bereits in der jetzigen Form gibt eine Kurzschreibform dafür:

[ruby] map.root :controller => “welcome”, :action => ‘show’ [/ruby]

Dies wird nochmal mehr vereinfacht und kann folgendermaßen geschrieben werden:

[ruby] root :to => ‘welcome#show’ [/ruby]

RESTful Routen

RESTful Routen ist die default- und bevorzugte Variante seit Rails 2.

Eine typische RESTful Route wird noch einfacher zu konfigurieren sein:

[ruby] resources :products [/ruby]

Diese Zeile würde alle benötigten Routen generieren. Genau wie in der jetzigen Version lassen sich mehrere Routen in einer Zeile definieren.

Weitere RESTful Actions

Weitere RESTful Actions lassen sich auf verschiedene Art und Weise implementieren:

[ruby] resources :products do collection do get :sold post :on_offer end end [/ruby]

Die Action läßt sich auch folgendermaßen schreiben:

[ruby] resources :products do get :sold, :on => :collection end [/ruby]

Die erste Variante ist besser wenn mehr als eine Action konfiguriert werden muss.

Nested Resources

In Rails 2 wurden nested Resources in einem Block definiert oder durch die Verwendung von :has_many oder :has_one Schlüssel.

Beide Version werden nun durch die Blockversion ersetzt:

[ruby] resources :projects do resources :tasks, :people end [/ruby]

Namespaced Resources

Diese sind nützlich wenn Resoucen in einem (Unter-)Verzeichnis liegen und sie lassen sich einfach konfigurieren:

[ruby] namespace :admin do resources :projects end [/ruby]

Die Neugestaltung der Routes in Rails 3 sieht viel versprechend aus und wird mit großer Sicherheit die Arbeit vereinfachen. Wir hoffen dieser Artikel wird euch beim Umstieg helfen.

Dieser Beitrag ist angelehnt an den Blogeintrag von Rizwan Reza

Back to Blog