【问题标题】:Rails 3. Distinct queryRails 3. 不同的查询
【发布时间】:2011-07-05 13:16:17
【问题描述】:

我正在开发一个 Rails 3 应用程序(充当 API)并且我允许 人们发送一堆电子邮件地址(通过 iPhone 应用程序),然后自动 在数据库中搜索匹配的成员(通过电子邮件)。

它现在可以工作(代码如下),但如果用户发送每封电子邮件的多个副本,则会返回双倍。

@users = @emails.find_all {|profile| User.find_by_email(profile['email']) }

如果找到,我希望 api 只返回一个唯一的用户副本。 我尝试了下面的代码,但它不起作用。

@users = @emails.find_all {|profile| User.select('DISTINCT email').where("LOWER (email) = ?", "%#{profile['email']}%") }

如何将上面的第一行代码更改为不同的查找?

感谢所有输入!

【问题讨论】:

    标签: ruby-on-rails-3


    【解决方案1】:

    我去看看

    How do I get the unique elements from an array of hashes in Ruby?

    a = [{:a => 1},{:a => 2}, {:a => 1}]
    a.inject([]) { |result,h| result << h unless result.include?(h); result }
    # this returns : [{:a=>1}, {:a=>2}]
    

    似乎正是你所需要的!

    【讨论】:

    • 看起来很有趣。如何转换@users = @emails.find_all {|profile| User.find_by_email(profile['email']) } 使用您的语法?请帮忙!
    • 我使用您的代码“清理”了传入的电子邮件哈希,现在效果很好!谢谢!
    • 这本身就可以很好地工作,但如果你也使用 pagination 就会中断,例如Kaminari,然后使用 .page(n) ;因为 inject() 将返回一个数组。
    • 注入将比在关系上使用 uniq 或 group 慢得多,尤其是当查询返回很多行时。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多