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:

Hope this helps.

/Lasse

2010/3/27 Paul A. [email protected]

Lasse B. wrote:

Hi Paul,

Take a look at shallow nesting:
rails.info

Hope this helps.

/Lasse

2010/3/27 Paul A. [email protected]

I think it solves my issue.

Thanks