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
1 | resources :photos |
creates seven different routes in your application, all mapping to the
Photos
controller:
1 2 3 4 5 6 7 | GET /photos GET /photos/ new POST /photos GET /photos/ :id GET /photos/ :id /edit PATCH / PUT /photos/ :id DELETE /photos/ :id |
Resources can also be nested infinitely by using this block syntax:
1 2 3 | resources :photos do resources :comments end |
This generates the following comments routes:
1 2 3 4 5 6 7 | 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 PATCH / 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
andnew
actions. Actions not specified are not changed.1resources
: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.
1resources
:posts
, path:
'postings'
The resource and all segments will now route to /postings instead of /posts
- :only
-
Only generate routes for the given actions.
12resources
:cows
, only:
:show
resources
:cows
, only: [
:show
,
:index
]
- :except
-
Generate all routes except for the given actions.
12resources
: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.
123resources
:posts
, shallow:
true
do
resources
:comments
end
Is the same as:
1234resources
: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.
12345scope 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:1234567post_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
PATCH
/
PUT
/sekret/comments/
:id
(.
:format
)
comment
DELETE
/sekret/comments/
:id
(.
:format
)
- :shallow_prefix
-
Prefixes nested shallow route names with specified prefix.
12345scope shallow_prefix:
"sekret"
do
resources
:posts
do
resources
:comments
, shallow:
true
end
end
The
comments
resource here will have the following routes generated for it:1234567post_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_sekret_comment
GET
/comments/
:id
/edit(.
:format
)
sekret_comment
GET
/comments/
:id
(.
:format
)
sekret_comment
PATCH
/
PUT
/comments/
:id
(.
:format
)
sekret_comment
DELETE
/comments/
:id
(.
:format
)
- :format
-
Allows you to specify the default value for optional
format
segment or disable it by supplyingfalse
.
Examples
1 2 3 4 5 | # routes call <tt>Admin::PostsController</tt> resources :posts , module : "admin" # resource actions are at /admin/posts. resources :posts , path: "admin/posts" |
Please login to continue.