【问题标题】:how can I write a case-insensitive find_by_email for Rails 3如何为 Rails 3 编写不区分大小写的 find_by_email
【发布时间】:2011-11-01 07:12:43
【问题描述】:

我发现如果用户使用电子邮件注册并在我执行以下操作时在他们的电子邮件中使用大写字母,我会得到 nil。

例子:

username = Dillan@example.com

params[:user][:email] = dillan@example.com


user = User.find_by_email(params[:user][:email])

user.nil?  

=> 是的

如何在不区分大小写的情况下搜索电子邮件,或者如何编写不区分大小写的 find_by_email?

【问题讨论】:

    标签: ruby-on-rails-3 case-insensitive


    【解决方案1】:

    如果用户(比如 X)有一个电子邮件“Dillan@example.com”,那么

    User.find(:all, :conditions => ["lower(email) =?", "dillan@example.com"]) 
    

    应该返回用户 X。我没有复制这种情况,但我猜这就是你本质上需要做的。

    或者,更好的是,使用 @MrTheWalrus 指出的 where 而不是 find

    User.where('lower(email) = ?', "dillan@example.com").first
    

    【讨论】:

    • 我会选择User.where('lower(email) = ?', "dillan@example.com").first,但关键点(使用SQL lower() 函数)是一样的。
    • 感谢 MrTheWalrus 和 prasvin。我用了你的答案,效果很好。
    • @MrTheWalrus - 如果您不介意,我也会将其发布为答案。谢谢。我听说使用 find 已被弃用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-06
    • 1970-01-01
    • 2023-01-18
    • 2010-10-15
    • 2013-06-23
    • 2011-10-14
    • 2011-05-12
    相关资源
    最近更新 更多