ルーティングのネストとは
ルーティングのネストとは、あるコントローラへのルーティングの記述の中に、別のコントローラへのルーティングを記述すること。
例えばTwitterの場合、ツイートに対してコメントできる機能があるその場合、このアプリケーションのルーティング(routes.rb)の記述は以下のようになる。
Rails.application.routes.draw do
resources :tweets do
resources :comments, only: [:create]
end
end
tweetsコントローラへのルーティングの記述の中に、commentsコントローラへの記述が書かれている。こうすることによって、どのツイートに紐づいたコメントなのかをURLで判別できるようにしている。
メリット
①URLの階層構造ができる
先程のTwitterのルーティング記述により生成されるURLは、「/tweets/id/comments」になる。
もっと具体的に言うと、とあるツイートにコメントすると「/tweets/2/comments」のようなURLが生成される。この「2」という数字はツイートのid番号。
つまり、このコメントは2番のツイートに対するコメントということが、URLから判断することができる。
②関係性のあるもの同士を紐づけることができる
ツイートとコメントの関係のように、ルーティングをネストさせることによって関係性のあるもの同士をを紐づけることができる。
関係があるもの同士は、原則ルーティングをネストさせて関係性のあるURLを生成しよう
使用する考え方・利用法としては、特に親子関係をもつテーブルがあり、それぞれ親に紐づくデータのみを扱いたいときにネストすることが多い。
モデルではこのような関係性を「has_many」と「belongs_to」で表現する
記入法
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー ←階層を下げ、do,,,endで囲む
end
end