“密码不能为空”显示两次

时间:2013-06-14 20:23:01

标签: ruby-on-rails ruby-on-rails-4

我正在尝试在createupdate上验证用户的密码(自定义身份验证,没有宝石)。 create始终需要输入密码,但只有在update输入时才需要输入密码。

模型/ user.rb

has_secure_password
validates :password, presence: {if: :requires_password?}, length: {minimum: 6}
validates :password_confirmation, presence: {if: :requires_password?}

private
  def requires_password?
    new_record? || !password.nil?
  end

这可以按预期工作,但在创建新用户时,会显示错误消息“密码不能为空”两次。

是否有一个简单的解决方法,或者我是否以错误的方式接近密码验证?

3 个答案:

答案 0 :(得分:9)

请参阅doc of has_secure_password,已包含对状态的验证:

  

验证密码是否存在,密码确认(使用   自动添加“password_confirmation”属性。您可以   如果需要,可以手动添加更多验证。

答案 1 :(得分:2)

试试这个:

validates :password, \
  presence: true,
  length: {minimum: 6},
  confirmation: true,
  if: :requires_password?

(为了便于辨认,我把它分成了多行;你仍然可以使用单行)

您不需要两次单独的验证 - 您只需要password上的一个包含确认验证的验证。

答案 2 :(得分:1)

这似乎对我有用!

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

创建时需要密码,但只有在传入内容时才需要更新。由于我使用has_secure_password,因此会自动处理确认。

更新了 models / user.rb

has_secure_password
validates :password, length: {minimum: 6}, allow_blank: true

感谢您的帮助!

相关问题