読んで欲しい人
- params[:id]ってURLのどこを見てるの?と悩んでいる人
例:URLが/posts/12/likes
だった時、@post = Post.find(params[:id])
のparamsは何を取ってくるの? - これに苦戦している過去の自分
動作環境
- MacOS 14.5
- ruby 3.3.0
- Rails 7.1.3.3
Paramsについて
https://pikawaka.com/rails/params
https://youtu.be/XXyTIA9VQzU?si=8oeozNfbIqWj6V4Z
クイズ
下記のparamsはURLのどこを参照しているでしょうか?
問題1
URLが/users/34/posts/56/likes/78
の場合、params[:post_id]
は何を返しますか?
問題2
URLが/search?q=rails&category=web_development
の場合、params[:id]
は何を返しますか?
問題3
URLが/search?q=rails&category=web_development
の場合、params[:q]
とparams[:category]
は何を返しますか?
答え
問題1
params[:post_id]
は、56
を返します。
問題2
URLが/search?q=rails&category=web_development
の場合、params[:id]
はnil
を返します。
問題3
params[:q]
は、rails
を返します
params[:category]
は、web_development
を返します
書こうと思った理由
ミニX(ツイッター)を作成しているときに「いいねしたユーザーの一覧を表示する」という機能追加の時にparams がしっかり理解できてないなと思ったため。
URL
- ポストの一覧機能:URL →
/posts
- ポストの詳細機能:URL →
/posts/post_id(1とか13とか)
- いいねしたユーザーの一覧機能:URL →
/posts/post_id/likes
詰まったところ
いいねしたユーザーの一覧機能のコントローラの記述を下記のように書いてた
def index
@liked_users = Post.find(params[:id]).liked_users
end
本当はこう
def index
@liked_users = Post.find(params[:post_id]).liked_users
end
学び・感想
凡ミスでしたが、コントローラがどうやって情報を取得するのか?がふわふわしてたので復習できてよかった
参考