【问题标题】:Rails ActiveRecord find User where Products equals 0Rails ActiveRecord 查找 Products 等于 0 的用户
【发布时间】:2013-06-12 06:38:44
【问题描述】:

我有一个拥有_many 产品的模型用户,但有些用户还没有任何产品。我想编写一个查询,为我提供当前没有任何产品的所有用户,即产品为 0 的用户。

我能想到的唯一方法是非常丑陋。例如,获取所有用户(User.all),然后遍历所有用户并检查@user.products

【问题讨论】:

    标签: mysql ruby-on-rails ruby-on-rails-3 activerecord


    【解决方案1】:

    这应该可以解决问题:

    User.includes(:products)
         .select('users.*')
         .group('users.id')
         .having('COUNT(products.*) = 0')
    

    取自我的另一个答案:

    编辑#1: 这是另一种解决方案:

    User.where('users.id NOT IN (?)', Product.all.pluck(:user_id).uniq.compact)
    

    它检索products 表中的所有user_ids 并选择不在此user_ids 列表中的所有用户。

    【讨论】:

    • 这两个查询对我来说都失败了。不知道为什么第一个失败,但我认为使用“!”为独特!紧凑!正在让它失败。删除它们似乎有效。
    • 好吧,我不知道为什么我添加了!最后...你能接受@botbot的答案吗?
    • 哦,回答您的第一条评论,第一条指令适用于 PostGreSQL,它可能需要对 MySQL 进行一些更改。而这第一个解决方案是性能最高的!
    • 是的,第一个在 mySQL 中给了我一个错误。但是第二个现在可以在没有“!”的情况下使用谢啦。我不知道采摘所以也谢谢你!答案已接受。
    猜你喜欢
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 2016-04-01
    • 2023-03-31
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-18
    相关资源
    最近更新 更多