トップ
ゲーム
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とか
まぁ色んなことができるから、試してみた方が良いな。
ドキュメント読めって話だけど、
なんか分かりにくいんだよね。
個人的には作って試す方が覚えられると思う。

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

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

コメントがありません。


おなまえ