resources
Resources
is so frequent that it is almost always done when routing with Ruby on Rails.
resources
will automatically route the 7 basic methods in your application to your model.
For example, if you describe the routing using resources
for the User
model
config/routes.rb
Rails.application.routes.draw do
resources :users
end
If you display the routes with $ rails routes
, it will be as follows.
$ rails routes
Prefix Verb URI Pattern Controller#Action
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
In this way, you can easily route with just one line.
** resources are basically used when the model has multiple resources. ** **
For example, the User
model will contain many models of users for your application.
In addition, the Post
model, which is the user's post model, can also use resources
because there are multiple posts in the application.
resource But what if you want to route to a single resource instead of to multiple resources?
A singular resource is a resource ** that is used only by the logged-in user on a page within the application **. For example, you can only use the profile page in the Instagram settings, right? Others will not be able to access your profile settings page. (If possible, the account has been hijacked lol)
Use the singular resource
instead of resources
when configuring routing for such a single resource.
For example, let's say you want to route your profile screen.
config/routes.rb
Rails.application.routes.draw do
resources :users
#Postscript
resource :profile
end
$ rails routes
Prefix Verb URI Pattern Controller#Action
new_profile GET /profile/new(.:format) profiles#new
edit_profile GET /profile/edit(.:format) profiles#edit
profile GET /profile(.:format) profiles#show
PATCH /profile(.:format) profiles#update
DELETE /profile(.:format) profiles#destroy
POST /profile(.:format) profiles#create
Something is different from resources
,.
** ① No index action **
why? You might think, but this is easy if you think about it.
As mentioned above, I explained that when using resource
, a single resource is used.
However, the index
action is intended to display all the resources of the model.
As a result, when dealing with a profile screen that is a single resource, the index
action that displays multiple is unnecessary.
** ②: No id **
The: id part has disappeared from the four actions (edit, show, update, destroy
).
In fact, this is also the same reason why there is no index
action.
The reason : id
was needed for the four actions in resources
is to specify which of the multiple resources it is.
For example, if you edit your own post, you have to specify which id the post is, or you won't know which post to edit. Similarly, when viewing the details of a post, updating a post, or deleting a post, you must specify which post it is.
But what about the profile settings screen?
It is a mechanism that you can understand because there is only one profile that is a single resource even if you do not specify it.
So the : id
disappears because you don't have to specify the id in the first place.