Operating environment Ruby 2.6.5 Rails 6.0.3.2
It was hard to see what was happening due to the routing nesting, so I posted it for my own confirmation.
routes.rb
Rails.application.routes.draw do
resources :hoges do
resources :fugas, only: [:index]
end
end
In the above code, fugas is nested for hoges, and when I run rails routes on the terminal, it looks like this:
Prefix ➡︎ hoge_fugas Verb ➡︎ GET URI Pattern ➡︎ /hoges/:hoge_id/fugas(.:format) Controller#Action ➡︎ fugas#index
Of course, other than the above is also displayed, but this time only the nested part will be dealt with. It's hard to understand with just this, so let's compare it with the case where the routing is not nested.
routes.rb
Rails.application.routes.draw do
resources :hoges
resources :fugas, only: [:index]
end
The above code is not nested, unlike the previous code. Now, let's run rails routes on the terminal as before and check the same part.
Prefix ➡︎ fugas Verb ➡︎ GET URI Pattern ➡︎ /fugas(.:format) Controller#Action ➡︎ fugas#index
You can see that the Prefix and URI Pattern are different compared to the previous one. Since Prefix is a simple description of URI Pattern, we will focus only on URI Pattern.
When nested URI Pattern ➡︎ /hoges/:hoge_id/fugas(.:format) If not nested URI Pattern ➡︎ /fugas(.:format)
In other words, you can say that routing nesting is done to change the URI Pattern. However, this phrase is difficult to understand, so I will explain it in a little more detail.
You will need to specify the hoge_id for the index action of the fugas controller to work because the URI Pattern has changed due to nesting. Therefore, you can put hoge_id in params. In other words, I mentioned earlier that routing nesting is for changing the URI Pattern, but it can be rephrased as ** for putting the id information of the nesting side (hoge this time) in params **. I can do it.
By putting the id information of the nested side (hoge this time) in params, it is possible to handle the information of the nested side in the controller of the nested side (fuga this time).