[rails tutorial 第8章] 8.2.2 現在のユーザーに関して質問です
Q&A
Closed
rails tutorial 第8章
8.2.2 現在のユーザー
こちらのトピックで分からないことがあります。
わからない事
こちらの
#current_userメソッドの定義
def current_user
if session[:user_id]
User.find_by(id: session[:user_id])
end
end
はなぜ、
#ユーザーIDが存在しない場合例外が返る
User.find(session[:user_id])
ではなく
#ユーザーが存在しない場合nilが返る
User.find_by(id: session[:user_id])
とするべきなのでしょうか?
本文より
セッションにユーザーIDが存在しない場合findメソッド使用すると例外が発生する事は理解しました。
また
セッションにユーザーIDが存在しない場合find_byメソッドを使用するとnilが返ることも理解しています。
しかしcurrent_userメソッドでは
if session[:user_id]
...
end
とすることでログインしているユーザーが存在しない場合、自動的にnilが返っているように思います。
それならばif文内が実行されるのはログインしているユーザーがいる時に限られると思うので、その中のコードが
User.find(session[:user_id])
でも
User.find_by(id: session[:user_id])
そこまで変わりがない様に思います。
考えてみたこと
①
session[:user_id]
には存在する値があるがUser.find(session[:user_id])
に対応するユーザーが存在しないケースがある?
②
#findを使用したcurrent_userメソッドの定義
def current_user
if session[:user_id]
User.find(session[:user_id])
end
end
は、たとえ
if session[:user_id]
...
end
としてif文によってユーザーが存在していることを確かめ、最終的にユーザーを取り出せたとしても単にfindよりもfind_byを使用するべきとされていて相応しくないから?
ご助言お待ちしております。