ruby-on-rails 设计自定义错误消息时,电子邮件已经存在,帐户是活跃的

hrysbysz  于 12个月前  发布在  Ruby
关注(0)|答案(1)|浏览(107)

我有一个用户模型与设计,并有一个活跃的列,表明如果用户是活跃或不。试用期结束后,该帐户将是不活跃的,除非用户注册的计划之一。
我目前显示自定义错误消息给用户时,电子邮件已经存在使用如下设计

en:
  activerecord:
    errors:
      models:
        user:
          attributes:
            email:
              taken: 'This email address has been used already. Please contact support if you would like more access'

字符串
然而,有时在试用期内使用活动帐户的用户试图再次注册,在这种情况下,我想显示一个不同的错误消息,如“请登录__登录__链接”
当电子邮件已经存在并且帐户处于活动状态时,有条件地显示错误消息的正确方法是什么?

3pmvbmvn

3pmvbmvn1#

处理这个问题的方法并不是真正通过验证,因为验证并没有您在应用程序流中所处位置的上下文。
而且仅仅在表单上显示一个小错误对用户的帮助要比显示一条flash消息小得多。
Devise让这变得相当容易,因为Devise::RegistrationsController#create让子类“进入”流:

class MyRegistrationsController < Devise::RegistrationsController
  def create
    super do
      if has_duplicate_email? && user_is_active?
        flash.now("You seem to already have an account, do you want to #{ link_to(new_session_path, "log in") } instead?")
      end
    end 
  end

  private 

  def has_duplicate_email?
    return false unless resource.errors.has_key?(:email)
    resource.errors.details[:email].any? do |hash|
      hash[:error] == :taken
    end
  end

  def user_is_active?
    User.find_by(email: resource.email)&.active?
  end
end

个字符

相关问题