LoginSignup
1
0

More than 3 years have passed since last update.

rails tutorial勉強中にparamsメソッドが分からなかったので調べてみた

Last updated at Posted at 2019-10-01

rails tutorial 8章を勉強中にparamsが分からなかった

rails tutorial8章 8.1.3節 ユーザーの検索と認証 に差し掛かった時、ん?と思った。
この節ではユーザーがログイン画面に入力したemailとpasswordを受け取って、
データベース上に存在しかつ正しいemailとpasswordの組み合わせになっているかを
確認するものだ。

params[:session]
{ session: { password: "foobar", email: "user@example.com" } }

画面に入力されたデータはこの形で受け取るらしいが、ここで詰まった。

what is paramsとsession ??

params?session?そんなの書いた覚えは無い…railsのお約束みたいなものなのかな?
ググってたらいいページを2つ見つけた。
ピカわか【Rails】paramsについて徹底解説!
WEBCAMP NEVI【Rails入門説明書】paramsについて解説

このページのおかげでかなり理解が深まりました。

They are…

  • 画面に入力された際に生まれたデータは すべてparamsメソッドにハッシュの形式でまとめられる
  • paramsメソッドの中にいくつかあるハッシュのうち、 emailとpasswordはsessionメソッドの中に収納される

とりあえずこんな感じに理解しました。
というのは間違いで、正しくは
params → メソッド
session → キー名
でした。

詳しく言うと、
params:ActionController::Parameters というclassによってユーザーが入力した情報などをもったインスタンスが生成される
そこで生成されたインスタンスを返すのがparamsというメソッド
session:paramsが返すインスタンスに含まれているキー名の一つ。

この記事のコメントを見ていただければより分かりやすいかと思います。
コメントでのご指摘ありがとうございました。

おまけにdebugger

debuggerでparams見たらもっと分かりそう。
そんな感じでdebugger使ってみました。

app/controllers/sessions_controller.rb
  def create
    user = User.find_by(email: params[:session][:email].downcase)
    debugger #ここdebugger
    if user && user.authenticate(params[:session][:password])
      # ユーザーログイン後にユーザー情報のページにリダイレクトする
    else
      # エラーメッセージを作成する
      render 'new'
    end
  end
   11:     else
   12:       # エラーメッセージを作成する
   13:       render 'new'
(byebug) params
<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"LxkdeujFgCWan2zWZJXo+NAsl6FWTvQuOIleI6sr/rGV37pREiUahEJn8GH6Jet8YHs5/xT2tJIQBMIWpBz5EQ==", "session"=><ActionController::Parameters {"email"=>"spdfmasd@gmail.com", "password"=>"s;dlfka;sd"} permitted: false>, "commit"=>"Log in", "controller"=>"sessions", "action"=>"create"} permitted: false>
(byebug) params[:session]
<ActionController::Parameters {"email"=>"spdfmasd@gmail.com", "password"=>"s;dlfka;sd"} permitted: false>
(byebug) params[:utf8]
"✓"

ちゃんとsessionがキー名だとわかりますね。

終わりに

どれくらいの人がここで躓くのかわかりませんが、今後同じような状況で悩む人の手助けになればと思います。
間違いなどありましたらぜひともご指摘をお願いいたします。

1
0
4

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
1
0