ルーティングのネストについて勉強したので備忘録としてまとめます。
ルーティングのネストとは、Twitterなどにある、コメント機能の実装に必要です。
あるtweet画面の詳細ページを開くと、それに紐づくコメント一覧が出てきます。
これはネストによって、コメントの一つ一つにtweetのidが記録されているからです。
例えばTwitterを例にすると、以下のようなルーティングになります。
Rails.application.routes.draw do
resources :tweets do
resources :comments, only: :create
end
end
tweetsコントローラーのルーティングの中に、commetnsコントローラーのルーティングが入れ子構造になっている事が分かります。
#親モデルのidを保持できる
ネストを行う理由は、親モデルのidを保持できるからです。rails routesコマンドで実行結果を確認してみます。
% rails routes
#実行結果
tweet_comments POST /tweets/:tweet_id/comments(.:format) comments#create
「/tweets/:tweet_id/comments」とある事から、ネストさせた事でtweet_idがパスに含まれている事が分かります。結果として、コメントした時にそれがどのtweetに紐づいたものかを特定できるようになりました。
反対にネストを外してrails routesしてみます。
% rails routes
#実行結果
comments POST /comments(.:format) comments#create
tweetsコントローラーとのネストを外すと、コメントのpathにtweet_idを含められない事が分かります。
#まとめ
ルーティングのネストを行う理由とは、親モデルのidを関連モデルに保持させる事でした。これによりTwitterなどのコメント機能の実装ができます。