我有点困惑。在我向我的示例应用添加电子邮件验证功能之前,我的验证在/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
因为当用户点击电子邮件中的链接以验证其电子邮件地址时,我会收到验证错误。在对密码验证进行此更改后,我的电子邮件正常运行!但是,我在用户控制器的编辑操作中对无效信息的测试开始失败。然后我注意到编辑表单不再有错误,即使他们没有输入密码。所以我添加了一些调试语句,你可以在下面的图片中看到:
“用户密码存在”评估为@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 ???
有人能帮助我吗?
答案 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?
永远不会发火。这就是这种情况下发生的事情。