ravelll の日記

よしなに

Nested Resources 時に親モデルのルーティングはしたくない

どういうことかと言うと、

  • User has_many Products のような 2つのモデルがある
  • POST /users/:user_id/products のルーティングがしたい
  • けど、/users/ についてのルーティングはしたくない

のような状況。より具体的には以下の感じです。

resources :users, only: [:create] do
  resources :products, only: [:create]
end

のようにすると目的のルートも設定されるけど…

$ rake routes
POST /users/:user_id/products
POST /users   # ←これがいらない

のように不要な親モデルのルートができてしまいます。
で、Rails Guides を読んでもわからずうーんとなってたところ、先輩エンジニアの id:inouetakuya が教えてくれました。

解決方法

resources :users, only: [] do
  resources :products, only: [:create]
end

のように、親モデル側の resources の only: オプションに空配列を指定することで実現できます。

なるほど空配列!気づきませんでした、スッキリです。
ご教示ありがとうございました!

--

reference