У меня есть простой класс ruby с включенными ActiveModel::Validations
и ActiveModel::SecurePassword
, я предоставляю все необходимые атрибуты (ниже) для нового объекта, но когда я проверяю его, он говорит, что это false
.
require 'active_model'
require 'bcrypt'
class User
include ActiveModel::Validations
include ActiveModel::SecurePassword
attr_accessor :name, :email, :password, :password_digest
def initialize(name:, email:, password:)
@name, @email, @password = name, email, password
end
validates :name, :email, presence: true
has_secure_password
end
user = User.new(
name: "TestUser1",
email: "test@gmail.com",
password: "password"
)
puts user.valid?
=> false
puts user.errors.messages
=> {:password=>["can't be blank"]}
puts user.password
=> password
Согласно документации здесь has_secure_password
предоставляет проверки на password
accessor:
- Пароль должен присутствовать.
- Пароль должен быть равен его подтверждению (при условии, что передано password_confirmation).
- Максимальная длина пароля - 72 (требуется bcrypt, от которого зависит ActiveModel :: SecurePassword)
Что я делаю не так? Как этот объект ложный?
EDIT
Я также попытался добавить атрибут password_confirmation
, но он тоже не работал.
user.password_confirmation = "password"
puts user.valid?
=> false
puts user.errors.messages
=> {:password=>["can't be blank"]}