验证用户模型上的密码在编辑视图中不起作用

时间:2014-02-21 06:47:20

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

我有点困惑。在我向我的示例应用添加电子邮件验证功能之前,我的验证在/app/models/user.rb中显示如下:

validates :password, length: { minimum: 6 }

实施注册电子邮件确认功能后,我需要将其添加到验证中:

validates :password, length: { minimum: 6 }, if: :validates_password?
...
def validates_password?
    password.present? || password_confirmation.present?
end

因为当用户点击电子邮件中的链接以验证其电子邮件地址时,我会收到验证错误。在对密码验证进行此更改后,我的电子邮件正常运行!但是,我在用户控制器的编辑操作中对无效信息的测试开始失败。然后我注意到编辑表单不再有错误,即使他们没有输入密码。所以我添加了一些调试语句,你可以在下面的图片中看到: enter image description here

“用户密码存在”评估为@user.password.present?

“user password_confirmation present”被评估为@user.password_confirmation.present?

“用户有效”评估为@user.valid?

“validate_password?”被评估为@user.password.present? || @user.password_confirmation.present?

这是怎么回事?通过valid?我的用户如何有效,但validate_password?方法返回false ???

有人能帮助我吗?

1 个答案:

答案 0 :(得分:1)

来自评论:

validates :password, length: { minimum: 6 }, if: :validates_password?

说“如果validates_password?true,我将确保密码长度至少为6个字符。

如果用户未填写密码/ password_confirmation,则validates_password?false,所以:

validates :password, length: { minimum: 6 }, if: :validates_password?
永远不会发火。这就是这种情况下发生的事情。