Ruby validates_uniqueness_of电子邮件导致错误的SQL唯一性检查

时间:2014-01-02 22:29:51

标签: sql ruby-on-rails ruby devise validates-uniqueness-of

我看到以下SQL用于检查用户在我的Ruby网站上注册时,电子邮件地址(例如joebloggs@joebloggs.com)是唯一的:

SELECT `users`.id FROM `users` WHERE (`users`.`email` = BINARY '--- !ruby/object:Mail::Multibyte::Chars \nwrapped_string: joebloggs@joebloggs.com\n') LIMIT 1

这总是导致返回零行,因此Ruby尝试在数据库中创建用户。在MySQL中尝试创建记录时,它失败了,因为users.email上有一个唯一的索引。

有人能告诉我为什么Ruby会在上面生成SQL语句吗?它在我在生产或开发模式下运行的实时站点上执行此操作。在我的开发站点(在生产或开发模式下运行)中,生成以下(正确的)SQL:

SELECT `users`.id FROM `users` WHERE (`users`.`email` = BINARY 'joebloggs@joebloggs.com') LIMIT 1

对于用户管理,我使用以下设置设计:

validates_uniqueness_of :email

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

在您的用户模型中,您可以将唯一性的电子邮件验证添加为false。

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable,
  # :lockable, :timeoutable and :omniauthable

  devise :database_authenticatable,:registerable,
         :recoverable, :rememberable, :trackable, :validatable, :authentication_keys => [:email]

  validate :email, presence: true, uniqueness: false

end