Understanding Routes with Routing Navigator

By | | Ruby on Rails Tutorials & Articles

3

Rick Olson’s released a Routing Navigator plugin to help understand how the Rails routing system works for your application (note: it only supports edge rails, not v1.1.2).

To test it out:

  1. Create a new rails application
    $ rails routingtest
  2. Install edge rails into vendor
    $ cd routingtest
    $ rake rails:freeze:edge
  3. Install the routing navigator plugin
    $ script/plugin source http://svn.techno-weenie.net/projects/plugins
    $ script/plugin install routing_navigator
  4. Install the plugin’s CSS and JS file
    $ rake update_routing_navigator
  5. Start your application
    $ script/server
  6. Browse to /routing_navigator
  7. Modify your routes, rinse and repeat
  8. You’ll also want to add the following to the head of your layout if you want to inspect routes on any of your view pages:
    <%= javascript_include_tag :defaults, 'routing_navigator' %>
    <%= stylesheet_link_tag 'routing_navigator' %>

For the lazy and curious: the routes generated for a base Rails application:

RouteSignificant KeysRequirementsConditions
/:controller/service.wsdl/[:controller, :action]{:action=>”wsdl”}{}
/:controller/:action/:id/[:controller, :action, :id]{}{}

…and the routes for a simple RESTful application, written using the simply_restful plugin:

RouteSignificant KeysRequirementsConditions
/:controller/service.wsdl/[:controller, :action]{:action=>”wsdl”}{}
/people.:format/[:format, :action, :controller]{:action=>”create”, :controller=>”people”}{:method=>:post}
/people/[:action, :controller]{:action=>”create”, :controller=>”people”}{:method=>:post}
/people.:format/[:format, :action, :controller]{:action=>”index”, :controller=>”people”}{:method=>:get}
/people/[:action, :controller]{:action=>”index”, :controller=>”people”}{:method=>:get}
/people/new.:format/[:format, :action, :controller]{:action=>”new”, :controller=>”people”}{:method=>:get}
/people/new/[:action, :controller]{:action=>”new”, :controller=>”people”}{:method=>:get}
/people/:id/[:id, :action, :controller]{:action=>”destroy”, :controller=>”people”}{:method=>:delete}
/people/:id/[:id, :action, :controller]{:action=>”update”, :controller=>”people”}{:method=>:put}
/people/:id.:format;edit/[:id, :format, :action, :controller]{:action=>”edit”, :controller=>”people”}{:method=>:get}
/people/:id;edit/[:id, :action, :controller]{:action=>”edit”, :controller=>”people”}{:method=>:get}
/people/:id.:format/[:id, :format, :action, :controller]{:action=>”show”, :controller=>”people”}{:method=>:get}
/people/:id/[:id, :action, :controller]{:action=>”show”, :controller=>”people”}{:method=>:get}
/:controller/:action/:id/[:controller, :action, :id]{}{}

Written By:

Tim Lucas

Tim (aka toolmantim) is a Sydney based, possum-eyed web application designer with a bent for web standards and user-centred design. When not hiding behind his camera he can be found doodling interface designs and coding Rails at his company aviditybytes.

 

{ 3 comments }

eadz June 26, 2006 at 10:13 am

Nice one! Thanks Lucas.

timlucas June 26, 2006 at 9:23 am

Hey eadz! Yeah it sure does… notice the /people.:format/ route above? This can be called with:

/people.html
/people.xml
/people.js

eadz June 26, 2006 at 7:44 am

Kinda OT, but regarding the new routing system in edge, do you know if it will support what isn’t supported at the moment ; .html endings.

I.e. all URLS end in .html /view/user/1.html, view/user.html etc ?

Comments on this entry are closed.