Shorter Rails 3 routes

Hi,

I have a small blog application, and I would like to shorten its routes. Here they are:

Blog::Application.routes.draw do   resources :categories do     resources :articles do       resources :comments     end end

A rake routes command produce the following lines:

                              GET /categories/:category_id/articles/:article_id/comments(.:format) {:controller=>"comments", :action=>"index"}     category_article_comments POST /categories/:category_id/articles/:article_id/comments(.:format) {:controller=>"comments", :action=>"create"} new_category_article_comment GET /categories/:category_id/articles/:article_id/comments/new(.:format) {:controller=>"comments", :action=>"new"}                               GET /categories/:category_id/articles/:article_id/comments/:id(.:format) {:controller=>"comments", :action=>"show"}                               PUT /categories/:category_id/articles/:article_id/comments/:id(.:format) {:controller=>"comments", :action=>"update"}      category_article_comment DELETE /categories/:category_id/articles/:article_id/comments/:id(.:format) {:controller=>"comments", :action=>"destroy"} edit_category_article_comment GET /categories/:category_id/articles/:article_id/comments/:id/edit(.:format) {:controller=>"comments", :action=>"edit"}                               GET /categories/:category_id/articles(.:format) {:controller=>"articles", :action=>"index"}             category_articles POST /categories/:category_id/articles(.:format) {:controller=>"articles", :action=>"create"}          new_category_article GET /categories/:category_id/articles/new(.:format) {:controller=>"articles", :action=>"new"}                               GET /categories/:category_id/articles/:id(.:format) {:controller=>"articles", :action=>"show"}                               PUT /categories/:category_id/articles/:id(.:format) {:controller=>"articles", :action=>"update"}              category_article DELETE /categories/:category_id/articles/:id(.:format) {:controller=>"articles", :action=>"destroy"}         edit_category_article GET /categories/:category_id/articles/:id/edit(.:format) {:controller=>"articles", :action=>"edit"}                               GET /categories(.:format) {:controller=>"categories", :action=>"index"}                    categories POST /categories(.:format) {:controller=>"categories", :action=>"create"}                  new_category GET /categories/new(.:format) {:controller=>"categories", :action=>"new"}                               GET /categories/:id(.:format) {:controller=>"categories", :action=>"show"}                               PUT /categories/:id(.:format) {:controller=>"categories", :action=>"update"}                      category DELETE /categories/:id(.:format) {:controller=>"categories", :action=>"destroy"}                 edit_category GET /categories/:id/edit(.:format) {:controller=>"categories", :action=>"edit"}

As can be seen, each resource is ordered in a tree. So I believe that, it's could be interesting to simplify my routes such as for example:

/categories/ => / /categories/:id => /:id /categories/:category_id/articles/ => /:category_id/articles /categories/:category_id/articles/:id => /:category_id/:id /categories/:category_id/articles/:article_id/comments/ => /:category_id/:article_id/comments /categories/:category_id/articles/:article_id/comments/:id => /:category_id/:article_id/:id

It's more DRY, is't it? :slight_smile:

Does Rails 3 provides a easy way to do so, with an HTTP verbs mapping to controller actions automatically?

Thanks anyone.

Hi Paul,

Take a look at shallow nesting: http://guides.rails.info/routing.html#shallow-nesting

Hope this helps.

/Lasse

Lasse Bunk wrote:

Hi Paul,

Take a look at shallow nesting: rails.info

Hope this helps.

/Lasse

I think it solves my issue.

Thanks