我正在开发Ruby on Rails应用程序,并发现了Michael Hartl的一篇有用的教程(Ruby on Rails教程(Rails 5))。 我现在在第8章,我们正在开发一个简单的,简单的登录/注销功能。辅助方法中的实例变量是否在每个请求之间保持不变?
在本教程中,将创建一个帮助程序模块来检查用户是否已经登录。这是在header.html.erb部分中的每个请求上调用的,以确定哪些链接显示在标题中。
module SessionsHelper
#Logs in the given user
def log_in(user)
session[:user_id] = user.id
end
def current_user
@current_user ||= User.find_by(id: session[:user_id])
end
def logged_in?
!current_user.nil?
end
end
无论如何,作者描述这条线用于防止具有请求的情况下(仅用于第一请求,如果用户登录)每次
@current_user ||= User.find_by(id: session[:user_id])
查询数据库的用户记录
这对我有意义,但我注意到在服务器的控制台中,在每次请求之后,数据库仍在被查询用户记录,因为@current_user总是被重置为零。 所以我的问题是,这是正常的吗? @current_user变量不是在请求之间持续存在,所以我觉得有些事情是错误的。谢谢:)
伟大的问题。特别是检查控制台以查看报告的内容。这样可以防止使用导轨时出现大量未来的痛苦和调试问题! :) –