3
1

Rails:params[:id]はURLのどこを参照しているのか? クイズ

Last updated at Posted at 2024-06-24

読んで欲しい人

  • 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

詰まったところ

いいねしたユーザーの一覧機能のコントローラの記述を下記のように書いてた

likes_controller.rb
def index
  @liked_users = Post.find(params[:id]).liked_users
end

本当はこう

likes_controller.rb
def index
  @liked_users = Post.find(params[:post_id]).liked_users
end

学び・感想

凡ミスでしたが、コントローラがどうやって情報を取得するのか?がふわふわしてたので復習できてよかった

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1