疑問
railsチュートリアルを学習している者です
第8章でcurrent_userメソッド
を定義する時に
findメソッドではなくfind_byメソッドを用いてユーザーを検索するのはなぜでしょうか?
書籍では
ユーザーIDが存在しない状態でfindを使うと例外が発生してしまいます。findのこの動作は、プロフィールページでは適切でした。IDが無効の場合は例外を発生してくれなければ困るからです。しかし、「ユーザーがログインしていない」などの状況が考えられる今回のケースでは、session[:user_id]の値はnilになりえます。この状態を修正するために、createメソッド内でメールアドレスの検索に使ったのと同じfind_byメソッドを使うことにします
このように書かれていますがいまひとつ理解ができません
お忙しいところお手数ですが、ご回答のほどよろしくお願いいたします。
該当のソースコード
ruby
1module SessionsHelper 2 3 # 渡されたユーザーでログインする 4 def log_in(user) 5 session[:user_id] = user.id 6 end 7 8 # 現在ログイン中のユーザーを返す(いる場合) 9 def current_user 10 if session[:user_id] 11 @current_user ||= User.find_by(id: session[:user_id]) 12 end 13 end 14end
試したこと
findメソッドで検索した場合とfind_byメソッドで検索した場合の両方とも試し、実際にログインをしたりわざと違うメールアドレスやパスワードを入力しました。
あまり違いがわかりませんでした。
###findメソッドとfind_byメソッドの認識について
findメソッド
・idを検索キーとしてデータを取得する
・id以外で検索することは不可能
・該当データがない場合エラーを出す
find_byメソッド
・id以外でも検索可能
・返ってくるのは最初にヒットした一件のみ
・該当データがない場合nil
を返す
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/26 23:00