当用户在我的 Ruby 网站上注册时,我看到以下 SQL 用于检查电子邮件地址(例如 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
在此先感谢您的帮助。