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:
http://guides.rails.info/routing.html#shallow-nesting

Hope this helps.

/Lasse

I think it solves my issue.

Thanks