【发布时间】:2018-10-15 22:57:25
【问题描述】:
我有一个简单的 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
根据文档here has_secure_password 提供对password 访问器的验证:
- 密码应该存在。
- 密码应与其确认相同(前提是password_confirmation 已传递)。
- 密码的最大长度为 72(ActiveModel::SecurePassword 所依赖的 bcrypt 要求)
我做错了什么?这个对象怎么是假的?
编辑
我也尝试添加password_confirmation 属性,但也没有用。
user.password_confirmation = "password"
puts user.valid? => false
puts user.errors.messages => {:password=>["can't be blank"]}
【问题讨论】:
标签: ruby validation passwords activemodel