Ruby 一見代入に見えるただのメソッド
module SessionsHelper def sign_in(user) . . . end def current_user=(user) @current_user = user end end
上のコードで使用されている特殊な文法は混乱しやすいのでご注意ください。普通のプログラミング言語では、定義するメソッドの名前に等号を使用することはできませんが、Rubyではメソッド名末尾の等号には特殊な意味があり、上のコードはcurrent_userへの要素代入を扱うように設計されたcurrent_user=というメソッドを単に定義します。つまり、以下のコードは
self.current_user = ...
自動的に以下のコードに置き換えられます。
current_user=(...)
Ruby on Rails チュートリアル:実例を使って Rails を学ぼう
代入演算子
リスト8.22では、Rubyでは定番の (しかし最初はまごつきやすい) ||= (“or equals”) 代入演算子を使用しています (コラム 8.2)。この代入演算子は、@current_userが未定義の場合にのみ、@current_userインスタンス変数に記憶トークンを設定します6。
@current_user ||= User.find_by(remember_token: remember_token)