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でよく使うテクニックの一つなので覚えておく