我能够创建用户并登录,但是当我登出我收到以下(尽管会议没有出现结束):未定义的方法`update_attribute”的零:NilClass
NoMethodError在/ signout
未定义的方法`update_attribute”的零:NilClass
这是在SessionsHelper,该SIGN_OUT方法,其中current_user.update_attribute(...) 这是否意味着CURRENT_USER是零?我能做些什么来解决这个问题。我对RoR很新,谢谢。
这里是我的SessionsHelper
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 signed_in?
!current_user.nil?
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 sign_out
current_user.update_attribute(:remember_token, User.encrypt(User.new_remember_token))
#current_user.update_attribute(:remember_token, User.new_remember_token)
cookies.delete(:remember_token)
self.current_user = nil
end
end
这里是我的SessionsController 类SessionsController < ApplicationController的
def new
end
def create
user = User.find_by(email: params[:session][:email].downcase)
if user && user.authenticate(params[:session][:password])
sign_in user
redirect_to user
else
flash.now[:error] = 'Invalid email/password combination' #not quite right
render 'new'
end
end
def destroy
sign_out
redirect_to 'signin'
end
end
这工作时,我添加'如果signed_in'。这是否意味着我之前的问题来自于未登录?或者可能是我退出了两次? – justchilly
是的。 :)除非你向我们展示设置current_user和(更重要的)设置哪个动作的before-filter,否则我无法分辨。如果上述内容是* ao *您编写的代码...那么问题是您需要在您应该登录的每个操作(包括注销页面)上设置current_user ... –