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.
resources :products| 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.
resource :profile| 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
resourcesgenerated one extra route forindexaction.indexaction 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
