在ActiveRecord中出现两个密码存在错误

时间:2019-01-25 22:06:50

标签: ruby-on-rails ruby activerecord sinatra

我正在我的应用程序中测试用户输入验证,关于我的密码是否存在两个错误。

这就是我为模型编写的。

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变量,一旦数据保留在数据库中,该变量就是用户密码的盐值哈希值。

1 个答案:

答案 0 :(得分:1)

has_secure_passwordcreate操作中带有自己的状态验证。因此,验证password的存在是多余的,并导致您收到两个“密码不能为空”错误消息。

只需删除validates :password, presence: true或为特定控制器操作/其他上下文的验证添加条件...即

validates :password, presence: true, on: :some_action