2014-11-15 4 views
0

나는에 의해 ROR 배우'railstutorial을 '사용자 로그 아웃 브라우저 나에게 오류 undefined method update_attribute for nil:NilClass를 표시 할 때 제 9 장, 대한 (사용자가 더을 인증하는 경우 이 오류는 표시되지 않습니다) 사용자가 모든 것을 인증 할 때 작동합니다.정의되지 않은 메서드`update_attribute '무기 호에 대한 : NilClass.Railstutorial

내 sessions_helper 내 나쁜 영어

그는 로그인하지 않은

답변

1

당신은 사용자가 로그 아웃 할 수 없습니다에 대한

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 
    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 
    current_user.update_attribute(:remember_token, 
            User.encrypt(User.new_remember_token)) 
    cookies.delete(:remember_token) 
    self.current_user = nil 
    end 


    def current_user=(user) 
    @current_user = user 
    end 
end 

죄송가 내 ​​sessions_controller

class 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 
     render 'new' 
    end 
    end 

    def destroy 
    sign_out 
    redirect_to signin_path 
    end 
end 

있습니다.

따라서 destroy 동작을 SessionsController에서 :

def destroy 
    sign_out if !signed_in? 
    redirect_to signin_path 
    end