私は、Michael Hartl による RoR チュートリアルに取り組んでいます。SessionsHelper のコードを次に示します。
module SessionsHelper
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user?(user)
user == current_user
end
def signed_in?
!current_user.nil?
end
def sign_out
self.current_user = nil
cookies.delete(:remember_token)
end
end
このコードから理解できないことがいくつかあります。
- メソッド
current_user?
ではcurrent_user
、変数ですか、それともメソッドの呼び出しcurrent_user
ですか?
current_user
このコンテキストでの値を決定する方法がわかりません。
- メソッド
current_user
で@current_user
は、 はインスタンス変数です。それは何のインスタンス変数ですか (つまり、どのクラスですか?)?
sign_in(user)
メソッドの下を見るself.current_user
と、 object の値が割り当てられていることがわかりますuser
。UsersController < ApplicationController
しかし (の定義にApplicationController
を含む行があるため、 self がクラス UsersController であると仮定すると) 、オブジェクトSessionsHelper
のインスタンス変数の定義はありません。current_user
self
- なぜ私たちは
current_user=
を使用する@current_user
のにを使用するのでしょうか?current_user?
current_user
StackOverflow で前提条件の検索を行いましたが、これらすべての違いについて適切な説明が見つかりませんでした。私が学ぼうとしていることの大部分は@current_user
、 , current_user
,をいつ使うかということです:current_user
。私は C、C++、PHP、Java、JavaScript に最も精通しています。これらの言語に類似する言語があれば、何が起こっているのかをよりよく理解するのに役立ちます.