Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
3
Help us understand the problem. What is going on with this article?
@oyaken0717

current_userの↓説明できる?

More than 1 year has passed since last update.

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

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までは大体リファクタリングできる。
今回がかなり特別。

3
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
oyaken0717
https://mobile.twitter.com/oyaken0717

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
3
Help us understand the problem. What is going on with this article?