今天在做 Ruby on Rails Tutorial 时,遇到一个问题,请教一下,我是新手,还请大神们帮帮忙。谢谢。
在这本书的 Sample_App 中,app/helpers/sessions_helper.rb 该文件定义了登入登出以及 cookies 相关的方法。
我是按照书里一步步来的,现在情况是在 sign out 时会出错,提示 current_user 为 nil,没有 update_attribute 方法。
但是我试了如果把 cookies.delete 这个方法放到 current_user.update_attribute 后面,就没有问题。
请问这是怎么回事呢?希望同时说明一下这其中的 self 是代表 SessionsController 的实例吗?为什么在 sign_out 方法里 update_attribute 时不用 self 呢?
该文件的完整代码如下:
module SessionsHelper
def sign_in(user)
remember_token = User.new_remember_token
cookies.permanent[:remember_token] = remember_token
user.update_attribute(:remember_token, User.encrypt(remember_token))
self.current_user = user
end
def current_user=(user)
@current_user = user
end
def current_user
remember_token = User.encrypt(cookies[:remember_token])
@current_user ||= User.find_by(remember_token: remember_token)
end
def signed_in?
!current_user.nil?
end
def sign_out
cookies.delete(:remember_token)
current_user.update_attribute(:remember_token, User.encrypt(User.new_remember_token))
self.current_user = nil
end
end