Rails: пароль не может быть пустым, BCrypt

У меня есть модель пользователя

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"]}

Я пробовал другие ответы, подобные приведенному здесь, но это не сработало.


person Hari Venkat    schedule 10.06.2020    source источник
comment
Одна из проверок для has_secure_password — пароль должен присутствовать при создании. См. api.rubyonrails.org/classes/ActiveModel/SecurePassword/. -› Этот механизм требует наличия атрибута XXX_digest. Где XXX — имя атрибута желаемого пароля.   -  person Matt    schedule 10.06.2020


Ответы (1)


Как указал Мэтт, это произошло из-за того, что атрибут дайджеста был равен нулю. Я добавил его в фикстуры и теперь он работает.

person Hari Venkat    schedule 12.06.2020