Edited at

current_userの↓説明できる?

これって元々どうなってたの?


app/helpers/sessions_helper.rb

def current_user

@current_user ||= User.find_by(id: session[:user_id])
end

っていうかこれどう動いてたんだっけ?


Lv.1 if文

if @current_user.nil?

@current_user = User.find_by(id: session[:user_id])
else
@current_user = @current_user
end


Lv1.1 asmさんからご提案頂きました。

@current_user = if @current_user.nil?

User.find_by(id: session[:user_id])
else
@current_user
end

「移り変わり」感がよりイメージしやすくなりましたね。


Lv.2 三項演算子

名前でビビりますね。

@current_user = @current_user.nil? ? User.find_by(id: session[:user_id]) : @current_user

これにリファクタリングできたらかっこいいけど…


Lv.3 or 演算子 「 || 」

@current_user = @current_user || User.find_by(id: session[:user_id])

                 ②  ①

@current_userが無ければ(nil)なら、User-を代入

②userと||のスキマ

 @current_userが存在すれば、@current_userの値はそのまま。


Lv3.5 大前提

n = n + 1

n += 1

同じ意味でしたね。


Lv.4 自己代入演算子 「||=」

@current_user ||= User.find_by(id: session[:user_id])

           ①

①Lv.3.5の

 nが@current_userの立場


まとめ

いきなりif文から「||=」までは難しい。

条件によりけりですが、Lv.2までは大体リファクタリングできる。

今回がかなり特別。