【问题标题】:Ruby on Rails Devise Reset Password IssueRuby on Rails 设计重置密码问题
【发布时间】:2014-04-24 08:44:45
【问题描述】:

我正在使用 letter_opener gem 在开发环境中测试我的 Devise 重置密码功能。

当新用户注册时,我要求他们输入两次电子邮件。这是我的User 模型中的代码:

validates :email_confirmation, presence: true
validates_confirmation_of :email

在我尝试测试密码重置功能之前,这一切正常。在您输入两次新密码并提交的页面上,它会抛出一个错误 Email confirmation can't be blank. 即使我将电子邮件和电子邮件确认字段粘贴在那里以查看会发生什么并在其中输入一些内容,它仍然认为字段为空。

我可以将模型代码更改为如下所示:

validates :email_confirmation, presence: true, unless: {action: :edit}
validates_confirmation_of :email, unless: {action: :edit}

但是,如果用户只是定期在其帐户资料中编辑他/她的电子邮件地址,它将不会保留电子邮件确认验证。

所以,我想知道是否有办法让重置密码页面不需要电子邮件确认,或者是否有办法编辑我的unless 声明在我的模型中,仅在密码重置页面上专门编辑时才应用异常。感谢您在使用 Devise 3.2.4 的 Rails 4 上提供任何帮助。

【问题讨论】:

    标签: ruby-on-rails devise


    【解决方案1】:

    你试过了吗?:

    validates :email_confirmation, presence: true, if: :new_record?
    

    编辑

    如果您只想在电子邮件发生更改时验证此字段,您可以这样做:

    validates :email_confirmation, presence: true, if: :email_changed?
    

    我认为这对两种情况都有效:

    • 当用户是新记录时
    • 当用户编辑电子邮件时

    试试这个!

    【讨论】:

    • 但是如果用户正在编辑他们的电子邮件地址呢?让他们在里面放一封确认电子邮件会很好。
    • 哦!我从来不知道:field_changed!呜呼!非常感谢,确实有效。
    猜你喜欢
    • 2012-08-29
    • 2011-10-07
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多