Ruby on rails 关于SessionHelper的混淆,特别是当前的用户方法?
我正在从MichaelHartl的教程学习Rails,但我对SessionHelper模块感到困惑。没有提供足够的有关复制Ruby on rails 关于SessionHelper的混淆,特别是当前的用户方法?,ruby-on-rails,ruby,railstutorial.org,Ruby On Rails,Ruby,Railstutorial.org,我正在从MichaelHartl的教程学习Rails,但我对SessionHelper模块感到困惑。没有提供足够的有关复制当前用户方法的信息。有人能解释一下为什么有两个,它们各自的目的是什么吗 module SessionsHelper def sign_in(user) cookies.permanent[:remember_token] = user.remember_token self.current_user = user end def current
当前用户
方法的信息。有人能解释一下为什么有两个,它们各自的目的是什么吗
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
end
我知道
sign\u in
方法会触发对current\u user=(user)
的调用,但为什么要再次调用current\u user
方法呢?我知道第二种方法是基于数据库中的记住令牌
来获取用户,但我无法连接这些点。当前用户
是读取器
方法,当前用户=
是属性当前用户
的编写器
方法。这两种方法是分开的,一种用于读取当前用户的值,另一种用于写入当前用户的值
编辑
在您的例子中,current\u user=
方法意味着将实例变量@current\u user
的值设置为传递的值(user)
当前用户
方法意味着
def current_user
## if @current_user = nil then
## set @current_user = User.find_by_remember_token(cookies[:remember_token])
## else return @current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
登录
方法
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
sign\u-in
方法将从控制器调用为sign\u-in-user
正如Aaron在评论中提到的,如果没有self
,Ruby只需创建一个名为current\u user
的局部变量,一旦sign\u in
方法完成执行,该变量就会丢失
但是通过说,self.current_user=user
当前_user的值将保留在类的当前实例(包含模块的控制器实例)中
为了更好地理解
self
请参考此current\u user方法是否只返回从数据库中提取的@current\u用户变量?另外,你能解释一下sign_-in方法中的self方法是怎么做的吗?我认为self只在模型中用于引用从数据库中提取的记录。self.
告诉ruby在类的实例上使用current\u user=
方法,而不是创建一个名为current\u user
的新局部变量,并将user
分配给它,只是为了让它退出范围。@TazMan检查我的更新答案。看看它是否能消除你的疑虑。
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end