投稿に紐づくコメントに対するAPIを定義する場合

次のように定義できそうだが、実際の所次のようなルーティングが定義されるので冗長である。

resources :posts do
  resources :comments
end
GET     /posts/:post_id/comments
POST    /posts/:post_id/comments
GET     /posts/:post_id/comments/:id # 冗長なURL
PATCH   /posts/:post_id/comments/:id # 冗長なURL
DELETE  /posts/:post_id/comments/:id # 冗長なURL

実際、次のほうがシンプルである

resoueces :posts do
  resources :comments, only: [:index, :create]
end
resource :comments, only: [:show, :patch, :destroy]
GET     /posts/:post_id/comments
POST    /posts/:post_id/comments
GET     /comments/:id
PATCH   /comments/:id
DELETE  /comments/:id

と考えていたが、これこそが次のオプションの出番だった

resources :posts, shallow: true do
  resources :comments
end

ここまでのまとめ

今さらだけど、rails って便利すぎる shallow: true を徹底して使うと良いのでは?

Recent Entries