背景
Ruby on Rails にてアプリ作成の復習中に躓きましたので
こちらに備忘録として投稿いたします。
ルーティングのネストとは?
あるコントローラーのルーティングの中に、別のコントローラーのルーティングを記述することです。
例えば、twitterのようなアプリがあったとします。
あるツイートに対して、たくさんのコメントがUPされますが、
どのツイートに対してのコメントかを判別する必要が出てきます。
それを実装するために、ルーティングをネストさせます。
具体的な記述の仕方
Rails.application.routes.draw do
resources :親となるコントローラー do
resources :子となるコントローラー
end
end
resources :tweets do
resources :comments, only: :create
end
このように記述することにより、どのツイートに対してのコメントかというルーティングが作成されます。
ルーティングをネストさせる一番の理由は、アソシエーション先のレコードのidをparamsに追加してコントローラーに送るためです。
この:tweet_idの箇所へ、コメントと結びつくツイートのidを記述すると、paramsのなかにtweet_idというキーでパラメーターが追加され、コントローラーで扱うことができます。
ネストしなかったら?
ネストしなかったら、どのツイートに対するコメントなのかを判別できなくなります。
まとめ
ルーティングをネストすると・・・
-URLの階層構造ができる(「/tweets/tweet_id/comments」など)
-関係性のあるもの同士を紐づけることができる(あるツイートとそれに対するコメントなど)