大家!最近,我正在研究 Michael Hartle 的 RoR 教程。在第 8 章中,我遇到了一个困扰我两天的问题。这是问题所在。在第 8.2.3 节中。
module SessionsHelper
def sign_in(user)
.
.
.
end
def current_user=(user)
@current_user = user
end
def current_user
@current_user # Useless! Don't use this line.
end
end
迈克尔写道:
如果这样做,我们将有效地复制 attr_accessor 的功能,我们在第 4.4.5.5 节中看到了它。问题是它完全无法解决我们的问题:使用清单 8.21 中的代码,用户的登录状态将被遗忘:如用户一转到另一个页面——噗!——会话将结束,用户将自动退出。为了避免这个问题,我们可以通过代码清单 8.19 中的代码创建的记忆令牌找到对应的用户,如代码清单 8.22 所示。
清单 8.22。
module SessionsHelper
.
.
.
def current_user=(user)
@current_user = user
end
def current_user
@current_user ||= User.find_by_remember_token(cookies[:remember_token])
end
end
我的问题是:为什么以前的代码会在用户转到新页面时自动注销会话?为什么第二段代码不会?我认为,只要用户登录,@current_user 的值将始终为“用户”,直到他明确注销,对吗?