Rails routes difference between resource and resources
Rails provides RESTful routing for resources. Routes can either define single resource or plural resources to generate routes of the application.
There is a logical difference that should be considered
when selecting resource
or resources
when generating routers.
Use of resources in Rails routes
Let’s see the routes generated when we use resources
in Rails routes.
HTTP Verb | Path | Controller#Action | Used for |
---|---|---|---|
GET | /products | products#index | display a list of all products |
GET | /products/new | products#new | return an HTML form for creating a new product |
POST | /products | products#create | create a new product |
GET | /products/:id | products#show | display a specific product |
GET | /products/:id/edit | products#edit | return an HTML form for editing a product |
PATCH/PUT | /products/:id | products#update | update a specific product |
DELETE | /products/:id | products#destroy | delete a specific product |
Use of resource in Rails routes
Let’s take an example of user profile
for a user logged in on website using Rails application.
User profile is supposed to be an entity (resource) to be worked on when user is logged in.
We would would not want end user to know the profile ID
of the user.
Thus,
- To view profile, route should be something like
www.example.com/profile
- To edit profile, route should be something like
www.example.com/profile/edit
etc.
We can define routes for profile
resource as given below.
HTTP Verb | Path | Controller#Action | Used for |
---|---|---|---|
GET | /profile/new | profiles#new | return an HTML form for creating a new profile |
POST | /profile | profiles#create | create a new profile |
GET | /profile | profiles#show | display a specific profile |
GET | /profile/edit | profiles#edit | return an HTML form for editing a profile |
PATCH/PUT | /profile | profiles#update | update a specific profile |
DELETE | /profile | profiles#destroy | delete a specific profile |
We can see singular resource routes don’t have ID
of the resource.
Moreover, it still directs requests to pluralized controller name.
Sometimes, you have a resource that clients always look up without referencing an ID. For example, you would like /profile to always show the profile of the currently logged in user. In this case, you can use a singular resource.
Difference between resource and resources
- As we can see
resources
generated one extra route forindex
action.index
action is intended to display list of resource. - Singular routes don’t have ID of resource being worked on.
- Both singular and plural resource routes route request to pluralized controller.
References
Subscribe to Ruby in Rails
Get the latest posts delivered right to your inbox