はじめに
Railsチュートリアル8章8.2.2の意味がよくわからなかったので、自分なりにまとめてみる。概要としては、以下の通りだ。
@current_user = User.find_by(id: session[:user_id])で定義すると、@current_userを呼び出すたびにデータベースを検索することになる。つまり遅くなる。それを防ぐため、current_userメソッドを作成する。
|
|
このような書き方はよく使うらしい。
実現したいこと
最初は@current_user = User.find_by(id: session[:user_id])でデータを取得する。
それ以降は、取得していた@current_user = { name: "Example User", .. }の値をそのまま流用する。
コードの分析
今までの書き方を使うと
|
|
最初(中身が何もないとき)だけ@current_userにUser.find_by..を代入する。
それ以降は@current_userの中身があるのでそのまま@current_userを返す。
短く書くと
|
|
直訳すると、「@current_userは@current_userまたはUser.find_by..である」だが、これだけではよくわからないので、処理の流れとして捉える。
||は項を左から順に判定し、trueになった時点で処理が終了するので、以下のようになる。
1回目
|
|
2回目以降
|
|
さらに短く書くと
|
|
a = a + 1をa += 1で表すことができるのと同じ理論(厳密には違うらしいが)。