以下是app / helpers
中Hartl教程中的帮助方法log_inmodule SessionsHelper
# Logs in the given user.
def log_in(user)
session[:user_id] = user.id
end
end
在控制器中,我们称之为:
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
log_in user
redirect_to user
else
flash.now[:danger] = 'Invalid email/password combination'
render 'new'
end
end
为什么这样做?该方法似乎是一个实例方法,但谁是创建操作中方法的接收者?
答案 0 :(得分:2)
在控制器的实例上调用此方法。控制器在HTTP请求流期间实例化。 SessionsController包含SessionsHelper模块的方法。尝试稍微重命名方法的名称,并在SessionsController log_inn
而不是log_in
中调用,您将看到与undefined method 'log_inn' for #<SessionsController:0x1047d4825>
类似的内容。所以你看到receiver是SessionsController类的实例。
答案 1 :(得分:0)
login
方法&#34;工作&#34;只需将user_id
分配给会话变量即可。会话在请求之间保持不变,用于确定用户是否已登录。有关会话的更多信息,请参阅此导轨指南:http://guides.rubyonrails.org/security.html#sessions