Rails has_secure_password - 无空白验证或两个验证错误

时间:2015-08-31 17:18:07

标签: ruby-on-rails validation activerecord

我有一个简单的ActiveRecord模型:

class User < ActiveRecord::Base
  validates :name, presence: true, length: { maximum: 50 }

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[\w\-._]*[\w\-_]\.[a-z]+\z/i
  validates :email, presence: true, length: { maximum: 255 },
                    format: { with: VALID_EMAIL_REGEX },
                    uniqueness: { case_sensitive: false }

  validates :password, 
                    presence: true, 
                    length: { minimum: 6 }

  before_save { email.downcase! }
  has_secure_password
end

所以这是我的问题。

1)如果我在密码vaildation中留下“presence:true”并将密码字段留空,当我在表单中按“创建”按钮时,我有两个相同的“密码为空”错误而不是一个。

2)如果我在密码vaildation中留下“presence:true”并用空格填写密码字段,我只有一个'密码是空白'错误。

3)如果我评论出现存在vaildation并将密码字段留空,我有一个'密码为空白'错误。

4)如果我注释了存在vaildation并用空格填写密码字段,我没有错误!

我想只有一个错误 - 无论是空场还是场满空格。我可以制作像@ user.errors.full_messages.uniq.each这样的黑客,但我不想这样做。

有没有办法让has_secure_password表现得像我想要的那样?..

1 个答案:

答案 0 :(得分:0)

您可以将选项传递给has_secure_password以跳过其内置验证并使用您自己的验证:

has_secure_password(validations: false)

https://github.com/rails/rails/blob/869a90512f36b04914d73cbf58317d953caea7c5/activemodel/lib/active_model/secure_password.rb#L66