こんにちは、Nanayakuです。
今回は、ログイン機能で使用される↓のcurrent_userメソッドについて解説しようと思います。
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
current_userメソッド内の処理について1つ1つ解説していきます。
「||=」は、代入演算子で「左辺がFalse(nilまたは偽)の場合に右辺の値を左辺に代入」と言う意味になります。
「User.find_by(id: 〇〇)」はUserモデルに保存されている〇〇のidを検索し、その情報を取得すると言う意味です。
「session[:user_id]」は、ログイン中のユーザーのidを取得しています。
これらを合わせると、以下の意味になります。
「User.find_by(id: session[:user_id])」
Userモデル内にあるログイン中のユーザーのid(user.id)と一致するidの情報を所得する
current_userメソッドの意味は、以下のようになります。
@current_user ||= User.find_by(id: session[:user_id])
インスタンス変数の「@current_user」がFalse(nil)の場合、Userモデルから現在ログインしているユーザーidと一致する情報を代入する
メモ
ログインしているかどうかは、下記の「logged_in?メソッド」で判断します。
def logged_in?
!current_user.nil?
end
この意味は、current_userがnil(空)かどうかを判断しています。
つまり、current_userメソッド内にある@current_user(インスタンス変数)内に情報があればログイン、なければログアウト状態となります。