我正在我的应用程序中测试用户输入验证,关于我的密码是否存在两个错误。
这就是我为模型编写的。
class User < ActiveRecord::Base
include Slugifiable
extend Slugifiable::Find
has_secure_password
has_many :posts
validates :email, uniqueness: true, presence: true
validates :username, uniqueness: true, presence: true
validates :password, presence: true
end
下面是我的迁移表:
class CreateUsers < ActiveRecord::Migration
def change
create_table :users do |t|
t.string :email
t.string :username
t.string :password
t.string :password_digest
end
end
end
每次我不输入任何内容运行应用程序时,它都会给我三则错误消息:“密码不能为空”,“电子邮件不能为空”,“用户名不能为空”。相反,我收到一个额外的“密码不能为空”错误。我使用的是password_digest
变量,一旦数据保留在数据库中,该变量就是用户密码的盐值哈希值。
答案 0 :(得分:1)
has_secure_password
在create
操作中带有自己的状态验证。因此,验证password
的存在是多余的,并导致您收到两个“密码不能为空”错误消息。
只需删除validates :password, presence: true
或为特定控制器操作/其他上下文的验证添加条件...即
validates :password, presence: true, on: :some_action