method

resources

Importance_3
v3.2.13 - Show latest stable - 1 note - Class: ActionDispatch::Routing::Mapper::Resources
resources(*resources, &block) public

In Rails, a resourceful route provides a mapping between HTTP verbs and URLs and controller actions. By convention, each action also maps to particular CRUD operations in a database. A single entry in the routing file, such as

resources :photos

creates seven different routes in your application, all mapping to the Photos controller:

GET     /photos
GET     /photos/new
POST    /photos
GET     /photos/:id
GET     /photos/:id/edit
PUT     /photos/:id
DELETE  /photos/:id

Resources can also be nested infinitely by using this block syntax:

resources :photos do
  resources :comments
end

This generates the following comments routes:

GET     /photos/:photo_id/comments
GET     /photos/:photo_id/comments/new
POST    /photos/:photo_id/comments
GET     /photos/:photo_id/comments/:id
GET     /photos/:photo_id/comments/:id/edit
PUT     /photos/:photo_id/comments/:id
DELETE  /photos/:photo_id/comments/:id

Options

Takes same options as Base#match as well as:

:path_names

Allows you to change the segment component of the edit and new actions. Actions not specified are not changed.

resources :posts, :path_names => { :new => "brand_new" }

The above example will now change /posts/new to /posts/brand_new

:path

Allows you to change the path prefix for the resource.

resources :posts, :path => 'postings'

The resource and all segments will now route to /postings instead of /posts

:only

Only generate routes for the given actions.

resources :cows, :only => :show
resources :cows, :only => [:show, :index]
:except

Generate all routes except for the given actions.

resources :cows, :except => :show
resources :cows, :except => [:show, :index]
:shallow

Generates shallow routes for nested resource(s). When placed on a parent resource, generates shallow routes for all nested resources.

resources :posts, :shallow => true do
  resources :comments
end

Is the same as:

resources :posts do
  resources :comments, :except => [:show, :edit, :update, :destroy]
end
resources :comments, :only => [:show, :edit, :update, :destroy]

This allows URLs for resources that otherwise would be deeply nested such as a comment on a blog post like /posts/a-long-permalink/comments/1234 to be shortened to just /comments/1234.

:shallow_path

Prefixes nested shallow routes with the specified path.

scope :shallow_path => "sekret" do
  resources :posts do
    resources :comments, :shallow => true
  end
end

The comments resource here will have the following routes generated for it:

post_comments    GET    /posts/:post_id/comments(.:format)
post_comments    POST   /posts/:post_id/comments(.:format)
new_post_comment GET    /posts/:post_id/comments/new(.:format)
edit_comment     GET    /sekret/comments/:id/edit(.:format)
comment          GET    /sekret/comments/:id(.:format)
comment          PUT    /sekret/comments/:id(.:format)
comment          DELETE /sekret/comments/:id(.:format)

Examples

# routes call <tt>Admin::PostsController</tt>
resources :posts, :module => "admin"

# resource actions are at /admin/posts.
resources :posts, :path => "admin/posts"
Show source
Register or log in to add new notes.
August 15, 2011
1 thank

The :path option

The path option will actually set the path and not the prefix I have found in Rails 3.0.5.

Example

resources :my_reports, :path => 'my-reports'

All actions for this resource will now be at /my-reports.