Reputation: 23
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:
undefined method `-' for nil:NilClass
Rails.root: /Users/user/Sites/rails_projects/sample_app1
app/controllers/sessions_controller.rb:11:in `create'
{"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
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
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