Activerecord Arel使用where和group查询问题

Activerecord Arel使用where和group查询问题,activerecord,Activerecord,在Rails 4中,我有以下3个表: 包含以下列的用户表: -名字 -电子邮件 具有以下列的订单表: -数量 -用户id 包含以下列的项目表: -名字 -描述 包含以下列的OrderItems表: 订单号 项目编号 关系: -orderItems表是一个联接表 -用户有许多订单,一个订单属于一个用户 问题: 1) 查找5个最大订单(项目最多的订单) 我认为问题是: OrderItem.group(:order_id).order(count(id) desc").limit(5).pluck(:

在Rails 4中,我有以下3个表:

包含以下列的用户表: -名字 -电子邮件

具有以下列的订单表: -数量 -用户id

包含以下列的项目表: -名字 -描述

包含以下列的OrderItems表: 订单号 项目编号

关系: -orderItems表是一个联接表 -用户有许多订单,一个订单属于一个用户

问题: 1) 查找5个最大订单(项目最多的订单) 我认为问题是:

OrderItem.group(:order_id).order(count(id) desc").limit(5).pluck(:order_id)
小组到底在做什么?当我输入
OrderItem.group(:order\u id)
时,我只是不理解输出

2) 如何找到名为“betty”和“TheEmail”的用户betty@gmail.com为此,我需要在Arel中编写SQL吗

  • OrderItem.group(:order\u id)
    本身不会生成有效的SQL。
    group
    变成SQL
    group by
    语句,如果行与指定的列具有相同的值,则将行分组在一起。
    group by
    需要与包含
    group by
    中的列或重新聚合函数,如
    COUNT

    您的完整查询在
    order
    子句中缺少引号。您需要:

    OrderItem.group(:order_id).order("count(id) desc").limit(5).pluck(:order_id)
    
  • 查找名为“betty”的用户和电子邮件“betty@gmail.com“您可以使用:

    User.where(name: "betty", email: "betty@gmail.com")