2

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

模型/用户.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

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

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

4

3 回答 3

10

请参阅 的文档has_secure_password,已包含存在验证:

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

于 2013-06-14T20:30:54.483 回答
2

尝试这个:

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

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

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

于 2013-06-14T20:29:30.423 回答
2

这似乎对我有用!

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

它在创建时需要密码,但只有在传入某些内容时才会更新。而且因为我使用has_secure_password的是 ,所以会自动处理确认。

更新模型/user.rb

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

谢谢您的帮助!

于 2013-06-15T01:46:18.093 回答