トップ
ゲーム
・Nintendo Online
・スプラトゥーン3
・マリラビ 2
・マリオテニスACE
・スマブラSP
・モンハンライズ
・A列車で行こう
・ピクミン3DX
・スーパーマリオ3Dコレクション
・マキブon
・ニンジャラ

ナンプレ
・不定期ナンプレ
・毎週ナンプレ

リンク集
・ピクミンリンク集
・YouTuber紹介

プログラム
・html/css
・Rails
・JavaScript
・android開発

日記
・たけし日記

たけし伝説!!
● 記事 ●

Rails ルーティングに:id以外を使う

更新日2021/12/28 投稿日2021/12/27
#開発   #Rails  

Railsで:id以外を指定する方法


<注意>
たけしがテキトーに書いていることなので
間違ってる可能性は大いにあり得る。
参考までに...


色々あるみたい。

# 以下は前提として
# hogeモデルにname属性がある
# という場合の話とする。

1. 普通に:nameとかつける
get 'hoges/:name', to: 'hoges#show'
こうすれば、PATHはhogeモデルのnameカラムに。
コントローラでparams[:name]で取得できると思う。


2. resourcesとか使ってるときparam: :name
resources :hoges, param: :name, only: [:show]
これでresourcesで自動で作られるPATHの:idの部分が
:nameになると思う。
同様にコントローラでparams[:name]で取得できるとハズ。
あれ?params[:hoge_name]だっけ?
わかんないや。今度ためす。

このパターンを使う場合はネストすることが多いと思う。
例えば
resource :hoges, param: :name do
    resources :fugas
end
これなら多分、
 hoges/名前/fugas/*
みたいなPATHになると思う。

ただ、上に書いたように
resource :hoges, param: :name do
    resources :fugas, param: :name
end
とした場合どうなるんだろう。
params[:hoge_name]でとれるんだったら問題ないが、
params[:name]だったらどうなるんだろう。
知らない(無責任)
まぁ、今度ためす。
試した。
ネストした場合は
hoge/:hoge_name/fuga/:name
になるようだ。
これならparams[:hoge_name]でhogeの名前、
params[:name]でfugaの名前がとれそう。

3. hogeモデルにto_paramメソッド
モデルに
def to_param
    name
end
って書く。
ただ、これは余りオススメできないような...
routesには:idとかって表示されて
params[:id]でnameが取得できると思う。
意味わかんなくなりそう。
これをやる場合は1.か 2.も併用した方が良いだろうな。
やったことないけど...(無責任)

以上。
ルーティングって難しいね。
今回とは別件だけど、
・resourceとか
・namespaceとかscopeとか
・memberとかcollectionとか
まぁ色んなことができるから、試してみた方が良いな。
ドキュメント読めって話だけど、
なんか分かりにくいんだよね。
個人的には作って試す方が覚えられると思う。

最後にもう一度注意。
テキトーな事を書いてる恐れがあるから
全て信じないように!

詳しく人教えて! (← 自分で試すとか言ってるクセに)
コメント

コメントがありません。


おなまえ