👌

# Railsのshallowオプションについて

2023/09/05に公開

shallow:trueとは?

用途:ルーティングの簡潔化を行える。

shallowオプションの利点は?

  • URLが短く、読みやすくなる。
  • 親リソースの記述を省略できて冗長性がなくなる。

ルーティングの簡潔化、具体的には?

ネストされたリソースのURLを簡潔にできる。

ネストされたリソースとは?

親子関係のあるリソース(例:掲示板とコメント)のこと。
例えば、1つの掲示板(boards)には複数のコメント(comments)が紐づく場合がある。
この場合、boardsが親リソース commentsが子リソースとして機能します。

この関係性をURLで表現すると、/boards/:board_id/comments/:idのようになる。

各部分の詳細な説明

  • boards: (複数の掲示板)
  • /:board_id:(特定の掲示板の固有のIDを示す。例えば、/boards/3はIDが3の掲示板を指す。
  • /comments:前述の掲示板に紐づいた複数のコメントのこと。
  • /:id:(/boards/3/comments/5 = IDが3の掲示板に関連したIDが5のコメントを指す。)

/boards/:board_id(ここまでが親要素)
/comments/:id(ここまでが子要素)

プレースホルダー

/:board_idや/:idはプレースホルダーととして現在のidを動的に受け取る。

shallowオプションの利点

どの掲示板にどのコメントが紐づくのかを示すboard_idがないと新しいコメントを作成できない。
しかし、一度コメントが作成されれば、そのコメントを参照・編集する際にはコメントのIDだけで十分。

shallow: trueを使用するケース
show, edit, update, destroy(すでに一意のID(:id)を持つアクションでのURLは、shallow:trueを記載することでboard_idを省略し、comment/:idのみで記述できるようになる。

まとめ
shallowオプションをなぜ記述する必要があるのかを調べていくうちにコメント作成の際の処理(board_idを必要とすること)他の処理はcommentのみで処理可能なことなどの学習にもつながった。

Discussion