きれいなルーティングで悩んだ
ranking テーブルがあって、その ranking テーブルの動的な ID を含む
ranking_item コントローラーへの URL を作りたかった
ranking_item を member で囲ってやるといい感じになった。
けどそれだと致命的にだめだったので備忘録
開発環境
ruby 2.6.5
Ruby on Rails 5.2.5
①member でネストしない場合
resources:rankings do
resources :ranking_items
end
生成される URL は
まあいいんだけどなんかなあってかんじ
外側の rankings のルーティングがいらないんだけどつくられちゃってる
② member でネストしてやる場合
resources:rankings do
member do
resources :ranking_items
end
end
きれい。
外側の ranking_item に対してはルーティングが作られず、内側の ranking_items に対してだけルーティングが生成されている
いい感じ
しかしこれはだめ
:id がおなじ。これだと params で rankings の動的な id をとりだせない。
基本的には上のケースだと①しかないのかと思う
member の使い方に関しては基本的な認識が間違っている気がする
本来は ranking に関しての crud 機能はいらなくて
ネストするだけにしたいのだけど。
ただ namespace とか scope 使うと 動的な :ranking_id が生成できない
shallow とか使ってもなんか微妙
いくら探してもいい感じのメソッドがないから
設計がそもそも間違っているさえある
難しい
追記
以下のように
resources :rankings, only: %i[] do
resources :ranking_items
end
外側の resources にだけ only の空配列を与えてやると
ほしいルーティングだけ生成された。
これが今のとこの最適解かも


