我不是很精通Rails,但这里是我的外行对SessionsHelper
中方法的理解。
首先,@current_user
是模块SessionsHelper
的实例变量。这意味着它持续用于SessionsHelper
中方法的后续调用。
def sign_in(user)
cookies.permanent[:remember_token] = user.remember_token
self.current_user = user
end
因此,通过使用“自我”,而不仅仅是“CURRENT_USER”,CURRENT_USER已经取得的会话的一部分,但尚未存储在数据库中,是否正确?
self.current_user = user
不不使 'CURRENT_USER' 的任何一个部分。
self
是指自己,SessionsHelper。
self.current_user =
有效地调用它的自己的方法,setter方法,def current_user=(user)
。
如果是这样的情况下,上市8.22中列出的方法是getter和 setter方法,正确吗?
是的。
def current_user=(user) # Setter.
@current_user = user
end
率先CURRENT_USER存储在数据库中,
号第一种方法,current_user=
,确实不店什么到数据库中。它所做的就是将实例变量@current_user
设置为user
。
def current_user # Getter.
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
和第二检索它需要?
第二种方法,current_user
,返回一个现有@current_user
值。
如果@current_user
是nil
(空),它运行
||= User.find_by_remember_token(cookies[:remember_token])
来检索和设置@current_user
为User
基于浏览器的remember_token的cookie数据库。
最后,需要getter和setter方法,因为它不好的做法,暴露出的方法的实例变量(在这种情况下,“sign_in”)?
在我看来,getter和setter方法并不是完全需要的。可以在整个帮手中使用@current_user
。
但是,Devise (a popular user authentication gem)在其助手中使用current_user
方法。这个comment也是相关的。
换句话说,这将是坏的替换:self.current_user = user
与@current_user = user
在 “sign_in” 的方法?
用@current_user = user
替换它应该没有问题。这个question(与上面链接注释相同的链接)显示了本教程中的功能相同。
来源
2013-05-09 15:57:41
Sun