如何让Devise PasswordController跳过用户验证?

时间:2012-01-04 18:00:55

标签: validation ruby-on-rails-3.1 devise

我有一个Rails应用程序,我使用Devise进行身份验证。设计允许用户点击以获取包含重置密码的链接的电子邮件。

当用户提供新密码时,会调用Devise::PasswordsController#edit,但密码实际上会在User模型上更新,然后保存。

我的问题是User有一个验证,可能会在密码重置期间失败,从而阻止它将更改保存到用户模型。 我想在重置密码时忽略该验证。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

如果密码确认为空(他们没有更改密码),我会在您的用户模型上设置一个条件验证,该验证不会运行验证。为此,您将使用以下内容:

validates :accepted_terms_at, 
  :presence => {:if => proc {|u| u.password_confirmation.blank?}}

更新您的验证需求。 ActiveModel中的验证允许您提供运行的过程:if和:除非有条件地验证。该proc将通过当前实例(在您的情况下为用户实例)来确定是否应该运行验证。

谢谢!