Rails:密码不能为空,BCrypt

问题描述 投票:0回答:1

我有一个用户模型

class User < ApplicationRecord
  include ApplicationConstants

  enum role: { admin: 0, waiter: 1, chef:2 }

  has_secure_password

  validates :name, :role, presence: true, on: :create
  validates :email, uniqueness: true, format: EMAIL_REGEX
  validates :password, length: { minimum: 8 }, allow_blank: true
end

控制器的定义是。

before_action :set_user, only: [:show, :update, :destroy]

def update
  if @user.update(user_params)
    render json: @user
  else
    render json: @user.errors, status: :unprocessable_entity
  end
end

def set_user
  @user = User.find(params[:id])
end

def user_params
  params.permit(:name, :role, :email, :password, :password_confirmation)
end

问题是以下测试案例失败

test "should update user" do
  put user_url(@user), params: { name: @user.name }
  assert_response 200
end

错误是。{"password":["can't be blank"]}

我试过其他的答案,就像所列的那个 此处但它没有工作

ruby-on-rails minitest bcrypt-ruby
1个回答
0
投票

正如Matt所指出的,这是因为digest属性是nil。我把它添加到固定装置中,现在它工作了。

© www.soinside.com 2019 - 2024. All rights reserved.