Ruby on Rails设计重置密码问题

时间:2014-03-18 15:05:23

标签: ruby-on-rails devise

我正在使用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}

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

所以,我想知道是否有办法让它成为重置密码页面不认为它需要电子邮件确认,或者是否有办法编辑我的{{1}我的模型中的语句只有在密码重置页面上专门编辑时才应用异常。感谢任何帮助,在Rails 4上使用Devise 3.2.4。

1 个答案:

答案 0 :(得分:1)

你试过这个吗?:

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

修改

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

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

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

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

试试这个!