Rory O'Connor
Rory O'Connor

Reputation: 47

NoMethodError in SessionsController#destroy

When attempting to set up a Logout action, I create a Session#destroy method in the Sessions_Controller. Below is the full Controller:

class SessionsController < ApplicationController
  before_action :set_session, only: [:show, :edit, :update, :destroy]
  helper_method :current_user

  def new
  end

  def create
    @user = User.find_by_email(params[:session][:email])
    if @user && @user.authenticate(params[:session][:password])
      session[:user_id] = @user.id
      redirect_to '/tasks'
    else
      redirect_to 'login'
    end 
  end

  def destroy
    log_out
    redirect_to '/login'
  end

log_out looks like this in sessions_helper.rb:

    def log_out
        session.delete(:user_id)
        @current_user = nil
    end

I receive the below error when attempting to use the logout button I have set up or navigate to localhost:3000/logout.

Error Message

enter image description here

I cannot even find that code to look at it more closely. Any ideas?

Upvotes: 0

Views: 583

Answers (1)

max
max

Reputation: 102222

class SessionsController < ApplicationController
  # move this to ApplicationController instead of duplicating it all over your app
  helper_method :current_user 

  def new
  end

  def create
    @user = User.find_by_email(params[:session][:email])
    if @user && @user.authenticate(params[:session][:password])
      session[:user_id] = @user.id
      redirect_to '/tasks'
    else
      redirect_to '/login'
    end 
  end

  def destroy
    log_out
    redirect_to '/login'
  end
end

def log_out
  reset_session
  @current_user = nil
end

Upvotes: 1

Related Questions