· 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