在我的User
模型中,我为密码及其确认设置了验证:
validates_presence_of :password, :password_confirmation
我用它来表格。这些属性不存储在数据库中,我使用的是authlogic
gem。
现在我正在尝试建立一个系统来通过电子邮件恢复忘记的密码。用户输入他的电子邮件,并按如下方式检索对象:
@user = User.find_by_email(params[:email])
然后,在该过程的某个时刻,User
属性的值设置为true
,意味着用户忘记了密码,因此我需要执行@user.save
。
问题出在那里。由于永远不存储password
和password_confirmation
,因此其值为nil
。但是,验证会发挥作用并阻止用户更新。
有没有办法跳过这些特定的验证,这样我才能做到这一点?或者我应该做些什么?有什么帮助吗?
答案 0 :(得分:2)
您可以使用save(validate: false)
跳过所有验证。例如,您可以使用:if
或:unless
选项跳过单独的验证。
validates_presence_of :password, :password_confirmation, unless: :forgot_password?
def forgot_password?
# return true if the user is in the forgot password process
end
答案 1 :(得分:1)
更改
validates_presence_of :password, :password_confirmation
到
假设您设置为true
的字段为forgot_password
validates_presence_of :password, :password_confirmation, :unless => Proc.new { |a| a.forgot_password? }
条件验证documentation