3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Rails】ルーティングのネストについて

Last updated at Posted at 2021-12-30

ルーティングのネストとは

ルーティングのネストとは、あるコントローラへのルーティングの記述の中に、別のコントローラへのルーティングを記述すること。

例えば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

参考記事

【Rails基礎】プログラミング初学者がつまずきやすい「ルーティングのネスト」について簡単に解説
ルーティングのネスト

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?