メモ用サブブログ

子曰わく學びて時にこれを習う。

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)