私は、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_userself
- なぜ私たちは
current_user=を使用する@current_userのにを使用するのでしょうか?current_user?current_user
StackOverflow で前提条件の検索を行いましたが、これらすべての違いについて適切な説明が見つかりませんでした。私が学ぼうとしていることの大部分は@current_user、 , current_user,をいつ使うかということです:current_user。私は C、C++、PHP、Java、JavaScript に最も精通しています。これらの言語に類似する言語があれば、何が起こっているのかをよりよく理解するのに役立ちます.