or equal
@foo
=>nil
>>@foo = @foo || "bar"
=> "bar"
>> @foo = @foo || "baz"
=> "bar"
Rubyは||式を左から右に評価し、演算子の左の値が最初にtrueになった時点で処理を終了するという短絡評価をするので、nilやfalseは飛ばして"bar"が代入されるし、@fooに値が入って入ればそこで処理が泊まり"bar"のままである。
よく
x = x + 1という書き方を x += 1と書くが、それと同じように
@current_user ||= User.find_by(id:session[:user_id])という書き方をする
これは
@current_userに何も代入されていない時だけfind_by呼び出しを行うことで、無駄にデータベースにSQL文を発行することを避けている。
||=は(or eaualは)Rubyでよく使うテクニックの一つなので覚えておく