【问题标题】:Rails, Devise, Validatable not working?Rails、Devise、Validatable 不起作用?
【发布时间】:2016-03-15 23:39:23
【问题描述】:

我在我的简单应用程序上设置了 :validatable 的 Devise,但如果发现错误,我似乎无法停止注册注册表单。

用户.rb:

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :confirmable, :lockable, :timeoutable and :omniauthable
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
...
end

到目前为止,我有一个带有标准姓名/电子邮件/密码/年龄字段的注册表单,当我提交没有失败的表单时一切正常。

但是,如果我尝试创建一个我知道会失败的新用户(例如,使用已经存在的电子邮件创建一个用户),它仍然会尝试创建该用户,而不是重定向回注册表单,它将继续加载下一页,就好像它是一个有效用户一样!当然,此时我收到错误消息,因为它尝试使用“current_user”代码加载页面,而用户不存在。

我什至从哪里开始追踪这个?不知道这是我安装设计的方式,还是别的什么?请帮忙。谢谢!

【问题讨论】:

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


    【解决方案1】:

    没有使用可验证的,但你总是可以使用一些你自己的验证:

    validates :email, uniqueness: true
    validates :email, presence: true
    validates_format_of :email, :with => /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i, message: "valid email please"
    

    【讨论】:

    • @ZiaUlRehmanMughal 是的。你可以设置任何你想要的条件。您还可以使用validate 编写自定义验证方法。打开一个新问题来验证最小密码长度,有人会告诉你如何做。这并不难。
    • 好的,谢谢。在我看来,如果没有可验证它是行不通的,所以无论如何我将它包含在我的用户模型中。现在工作正常。
    【解决方案2】:

    关于邮件的格式,我推荐你使用 devise.rb。 在那里您可以将正则表达式设置为电子邮件,无需放入模型。

     config.email_regexp = /\A[^@]+@[^@]+\z/
    

    Devise's Issue Explanation

    【讨论】:

      【解决方案3】:

      您可以在非设计模型中使用 Devise 的电子邮件验证:

      class UserRegistration < ApplicationRecord
        validates_format_of :email, with: Devise.email_regexp
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-09-11
        • 1970-01-01
        • 2017-03-29
        • 1970-01-01
        • 2013-12-23
        • 1970-01-01
        • 2017-04-22
        • 1970-01-01
        相关资源
        最近更新 更多