1
2

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.

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

Posted at

ルーティングのネストについて勉強したので備忘録としてまとめます。

 ルーティングのネストとは、Twitterなどにある、コメント機能の実装に必要です。
 あるtweet画面の詳細ページを開くと、それに紐づくコメント一覧が出てきます。
これはネストによって、コメントの一つ一つにtweetのidが記録されているからです。

例えばTwitterを例にすると、以下のようなルーティングになります。

ruby.rb
 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などのコメント機能の実装ができます。

1
2
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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?