Luchia Bloomfield
Luchia Bloomfield

Reputation: 89

Password can't be blank - User scaffold

I've just generated my User scaffold and I'm now getting an error with 'Password can't be blank' even though I've filled out all the fields. I'm confused because my rake tests are passing, so not sure where the error is?

User Model:

class User < ActiveRecord::Base
validates :name, presence: true, uniqueness: true
has_secure_password
end

And my user controller:

class UsersController < ApplicationController
 before_action :set_user, only: [:show, :edit, :update, :destroy]

 # GET /users
 # GET /users.json
 def index
  @users = User.order(:name)
 end

 # GET /users/1
 # GET /users/1.json
 def show
 end

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

# GET /users/1/edit
def edit
end

# POST /users
# POST /users.json
def create
 @user = User.new(user_params)

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

# PATCH/PUT /users/1
# PATCH/PUT /users/1.json
def update
 respond_to do |format|
  if @user.update(user_params)
    format.html { redirect_to users_url, notice: "User #{@user.name} 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.destroy
  respond_to do |format|
    format.html { redirect_to users_url }
    format.json { head :no_content }
  end
 end

private
# Use callbacks to share common setup or constraints between actions.
def set_user
  @user = User.find(params[:id])
end

# Never trust parameters from the scary internet, only allow the white list through.
def user_params
  params.require(:user).permit(:name, :password_digest)
end
end

If you need more code submitted, just let me know. I'm working with Rails 4.

Upvotes: 0

Views: 635

Answers (1)

rmagnum2002
rmagnum2002

Reputation: 11421

Would be nice to see the server logs when you submit the form, something tells me you don't require the right parameters, from your form there should be: password and password_confirmation but in controller you require password_digest for some reason:

def user_params
  params.require(:user).permit(:name, :password_digest)
end

it should be:

def user_params
  params.require(:user).permit(:name, :password, :password_confirmation)
end

and password_digest should be updated not via params.

Upvotes: 1

Related Questions