我目前正在审查会话,并且遇到了我以前使用的非常通用的会话控制器:
module SessionsHelper
def sign_in(user)
self.current_user = user
cookies[:remember_token] = user.remember_token
end
def sign_out
self.current_user = nil
cookies[:remember_token] = nil
end
def signed_in?
!current_user.nil?
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
def current_user=(user)
@current_user = user
end
end
我意识到我在视图中多次使用 current_user 。前任:
<% if current_user == @user %>
<%= current_user.name %>
<% else %>
This user is not you.
<% end %>
但是,我不明白为什么
current_user
可以像实例变量一样访问。不就是一种方法吗?为什么我可以将其视为相同@current_user
并从中提取属性,例如current_user.name
,current_user.age
等?我认为这仅适用于实例变量。在第一种和第二种方法中
sign_in(user)
,and指的是什么sign_out
?self
这些被认为是类方法对吗?