Anthony Panepinto
Anthony Panepinto

Reputation: 23

NoMethodError in SessionsController#create

I've been following along with Michael Hartl's Tutorial, and for those who are familiar with it, I'm on Lesson 10 - Updating Users.

So far I've built an app that should allow users to sign up, sign in, and sign out. My app allows users to sign up, but when trying to sign in I get the following error:

NoMethodError in SessionsController#create

undefined method `-' for nil:NilClass

Rails.root: /Users/user/Sites/rails_projects/sample_app1

app/controllers/sessions_controller.rb:11:in `create'

Request

Parameters:

{"utf8"=>"✓",
"authenticity_token"=>"/SEaqnrMf5X0pd4FVWbu8uWVAjTNw4LPKiXg+8Hl0PQ=",
"session"=>{"email"=>"[email protected]",
"password"=>"[FILTERED]"},
"commit"=>"Sign in"} 
Here are my Session_Controller Contents:
class SessionsController < ApplicationController
def new
@title = "Sign in"
end

def create
user = User.authenticate(params[:session][:email],
                        params[:session][:password])
if user.nil?
flash.now[:error] = "Invalid email/password combination."
@title - "Sign In"
render 'new'
else
sign_in user
redirect_to user
end
end   

def destroy
 sign_out
 redirect_to root_path
end
end
Users_Controller contents
class UsersController < ApplicationController

def show
 @user = User.find(params[:id])
 @title = @user.name 
 end

def new
@user = User.new
@title = "Sign up"
end

def create
@user = User.new(params[:user])
if @user.save
sign_in @user
redirect_to @user, :flash =>  {:success => "Welcome to the Fun House!"}
else
@title = "Sign up"
 render 'new'
end
end
end
Sessions_helper contents
module SessionsHelper

 def sign_in(user)
cookies.permanent.signed[:remember_token] = [user.id, user.salt]
current_user = user
end

def current_user=(user)
@current_user = user
end

def current_user
 @current_user ||= user_from_remember_token
end

def signed_in?
 !current_user.nil? 
end

def sign_out
 cookies.delete(:remember_token)
 self.current_user = nil
end 

private

def user_from_remember_token
 User.authenticate_with_salt(*remember_token)
end

def remember_token
 cookies.signed[:remember_token] || [nil, nil]
end

end
And Lastly Users_helper contents:
module UsersHelper
def gravatar_for(user, options = { :size => 50})
gravatar_image_tag(user.email.downcase, :alt => user.name, 
                                        :class => 'gravatar',
                                        :gravatar => options)
end
end

Upvotes: 0

Views: 567

Answers (2)

Anthony Panepinto
Anthony Panepinto

Reputation: 23

:-) Problem solved thanks to Taryn East.

def has_password?(submitted_password)
  encrypted_password == encrypted(submitted_password)
end

should be

def has_password?(submitted_password)
  encrypted_password == encrypt(submitted_password)
end

Upvotes: 1

Paul Fioravanti
Paul Fioravanti

Reputation: 16793

The issue is, like the exception says, your line @title - "Sign In": it should be
@title = "Sign In".

However, I would say a bigger issue is why you're doing the Rails 3.0 version of the tutorial now when the Rails 3.2 version is the latest. It's definitely worth switching up.

Upvotes: 0

Related Questions