ルーティングのshallowオプションについて

概要

shallowオプションの挙動がいまいち理解出来ていなかったので、忘備録として書きます。 shallowオプションとは、子要素をユニークに特定出来る場合、浅い階層構造でルーティングを定義します。

コンテンツ

config/routes.rbに次のようなルーティングが定義されているとします。

Rails.application.routes.draw do
  resources :projects do
    resources :users
  end
end

shallowオプションを使用しない場合と使用する場合のUser#showのURLを比較します。

:arrow_down: 表にまとめてみました。

条件 URLの定義 具体例
shallowオプションを使用しない場合 /projects/:project_id/users/:id http://localhost:3000/projects/1/users/1
shallowオプションを使用する場合 /users/:id http://localhost:3000/users/1

userは、所属しているprojectに関係なくユニークに特定出来るため、一段階層構造が浅いルーティングが定義されました。

以上です :end:

参考資料