nupac
nupac

Reputation: 2489

undefined method `password' for nil:NilClass

I get this error when I try to get to the users#login page. my controller is

class UsersController < ApplicationController
# GET /users
# GET /users.json
def login
@username = User.find_by_username(params[:username])
@password = params[:password]
if(@username.password == @password)
  format.json { render json: @username, notice: "Login Successful!!" }
end
end

def index
@users = User.all

respond_to do |format|
  format.html # index.html.erb
  format.json { render json: @user }
end
end

# GET /users/1
# GET /users/1.json
def show
@user = User.find(params[:id])

respond_to do |format|
  format.html # show.html.erb
  format.json { render json: @user }
end
end

# GET /users/new
# GET /users/new.json
def new
@user = User.new

respond_to do |format|
  format.html # new.html.erb
  format.json { render json: @user }
end
end

# GET /users/1/edit
def edit
@user = User.find(params[:id])
end

# POST /users
# POST /users.json
def create
@user = User.new(params[:user])

respond_to do |format|
  if @user.save
    format.html { redirect_to @user, notice: 'User was successfully created.' }
    format.json { render json: @user, status: :created, location: @user }
  else
    format.html { render action: "new" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
 end
 end

# PUT /users/1
# PUT /users/1.json
def update
@user = User.find(params[:id])

respond_to do |format|
  if @user.update_attributes(params[:user])
    format.html { redirect_to @user, notice: 'User was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: "edit" }
    format.json { render json: @user.errors, status: :unprocessable_entity }
  end
end
end

# DELETE /users/1
# DELETE /users/1.json
def destroy
@user = User.find(params[:id])
@user.destroy

respond_to do |format|
  format.html { redirect_to users_url }
  format.json { head :no_content }
end
end
end

I researched and the problems people had was that either they didnt migrate the column "password" or there password was actually "Password" but when i get into rails console and run

user = User.new
 => #<User id: nil, name: nil, email: nil, username: nil, created_at: nil, updated_at:     nil, password: nil> 

so I guess that is not my problem.

Upvotes: 0

Views: 1483

Answers (2)

Anand Soni
Anand Soni

Reputation: 5110

It seems that you are not getting the record of user from database. There is two possibilities

1) Either the user is not in database or

2) The parameter is wrong i.e. params[:username]

You need to check that parameter is coming as expected and if its correct then try to look at the database that record is available.

You can check params like this:

puts params[:username]
puts params[:password]

Or you can also check from server console.

Hope this helps!!!

Upvotes: 1

Patrick Oscity
Patrick Oscity

Reputation: 54684

The problem is that @username is nil. @username is a confusing name anyway, it should be @user.

Upvotes: 1

Related Questions