Undefined method `update_attribute' for nil:NilClass.Railstutorial

188 Views Asked by At

I learn ror by the 'railstutorial' and for the chapter 9, when user log out browser show me an error undefined method update_attribute for nil:NilClass (This error appears only when user no authenticated ) when user authenticated all it works.

There is my 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

There is my sessions_helper

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

sorry for my bad English

1

There are 1 best solutions below

0
On BEST ANSWER

You can't logout user, when he isn't logged in.

Therefore, change destroy action in SessionsController to:

  def destroy
    sign_out if !signed_in?
    redirect_to signin_path
  end