module SessionsHelper
.
.
.
# Returns the user corresponding to the remember token cookie
def current_user
if (user_id = session[:user_id])
@current_user ||= User.find_by(id: user_id)
elsif (user_id = cookies.signed[:user_id])
user = User.find_by(id: user_id)
if user && user.authenticated?(cookies[:remember_token])
log_in user
@current_user = user
end
end
end
# Returns true if the user is logged in, false otherwise
def logged_in?
!current_user.nil?
end
# Logs out the current user
def log_out
forget(current_user)
session.delete(:user_id)
@current_user = nil
end
end
最后两个 def
中的 current_user
到底指的是什么?是上面定义的 current_user
方法吗?
而以上代码中的 @current_user
又指的是什么?感觉有点混淆了,求解答。
@current_user はインスタンス変数、current_user はこのモジュールのメソッド、current_user を呼び出す最後の 2 つのメソッドは、上記の current_user メソッドの呼び出しを参照します。 同じクラス内のインスタンス メソッドは、メソッド名を使用して直接呼び出すことができます。
@current_user は、current_user メソッドの戻り値です。最後の 2 つのメソッドは current_user メソッドを呼び出し、実際にインスタンス変数 @current_user を取得します
@current_userはグローバルクラスの変数、current_userはメソッド名、Rubyではメソッドを呼び出す際に()が省略できるので初心者が混乱しやすい、@current_userの値はnil(@xxxで初期化される値はnil) または current_user が値を返します。
これを補うために、
current_user
实际上代指current_user
这个方法返回的@current_user
实例变量。因为这里我们获得的是current_user
呼び出し後の戻り値。