Skip to main content

Understanding Routes with Routing Navigator

By Tim Lucas



😳 Ever felt a little embarassed sharing your JavaScript? Let's fix it.

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
    $ 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:

Route Significant Keys Requirements Conditions
/: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:

Route Significant Keys Requirements Conditions
/: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] {} {}

New books out now!

💁‍♀️ Fun Fact: Python was ranked #2 on a recent highest paid coders list. *

🤓 Ok. When did a code editor from Microsoft become kinda cool!?