【问题标题】:Authlogic: generates "Email has already been taken" error twiceAuthlogic:两次生成“电子邮件已被接收”错误
【发布时间】:2011-06-29 12:14:58
【问题描述】:

我在我的用户模型中使用 authlogic,登录字段设置为使用电子邮件,因此:

acts_as_authentic do |c| 
  c.login_field = :email 
end  

如果我尝试创建一个新用户,并且该电子邮件已在使用中,它会添加两次重复的电子邮件错误:(来自控制台)

user = User.new(:first_name => "fred", :last_name => "Smith", :email => User.last.email);user.valid?;errors = user.errors
=> {:email=>["has already been taken", "has already been taken"]} 

我猜这与使用电子邮件作为登录名有关,也许吧?除了 validates_format_of 之外,我没有对电子邮件进行任何其他验证,并且我尝试删除该验证(没有任何区别)。

这很痛苦,因为当验证失败时,它会弄乱我在表单上显示的错误。

在我尝试破解 authlogic 之前,有谁知道为什么会发生这种情况?谢谢,最大

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 authlogic


    【解决方案1】:

    我刚刚遇到了同样的问题。尝试在acts_as_authentic 块中调用config.validate_email_field = false。它仍然会验证登录字段,在我们的例子中是在电子邮件字段中,但只会验证一次。

    acts_as_authentic do |config|
      config.login_field :email
      config.validate_email_field = false
        ...
    end
    

    【讨论】:

    • 还要确保您没有在该字段上手动分配验证,即。 validates :email, :presence => true。这导致我返回了 3 次消息。
    【解决方案2】:

    Authlogic 中有两种方法:validate_email_field 和 validate_login_field。

    这些方法禁用/启用特定验证:

    我还在我的应用程序中使用了config.login_field :email,我需要确保User#email 已经过验证。所以就我而言,我选择使用config.validate_login_field = false,因为验证之间存在差异。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多