きれいなルーティングで悩んだ
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
の空配列を与えてやると
ほしいルーティングだけ生成された。
これが今のとこの最適解かも