2014-02-23 71 views
0

我能夠創建用戶並登錄,但是當我登出我收到以下(儘管會議沒有出現結束):未定義的方法`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 

回答

2

,如果你告訴我們什麼確切的情況是,你得到這個錯誤就好。

當你目前沒有登錄時,你很可能會去註銷頁面。

在這種情況下 - 爲什麼不添加「如果signed_in?」你的行爲例如:

def sign_out 
    return unless signed_in? # you are already signed out 
    current_user.update_attribute(:remember_token, User.encrypt(User.new_remember_token)) 
    cookies.delete(:remember_token) 
    self.current_user = nil 
end 

def destroy 
    sign_out if signed_in? 
    redirect_to 'signin' 
end 

另外 - 你有skip_before_action authenticate_user或類似的sign_out?

再次 - 註銷,您必須登錄...因此您不能跳過註銷的身份驗證操作。

+0

這工作時,我添加'如果signed_in'。這是否意味着我之前的問題來自於未登錄?或者可能是我退出了兩次? – justchilly

+0

是的。 :)除非你向我們展示設置current_user和(更重要的)設置哪個動作的before-filter,否則我無法分辨。如果上述內容是* ao *您編寫的代碼...那麼問題是您需要在您應該登錄的每個操作(包括註銷頁面)上設置current_user ... –

相關問題