Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Activerecord Rails查找正好有一个订单的所有客户_Activerecord_Ruby On Rails 4 - Fatal编程技术网

Activerecord Rails查找正好有一个订单的所有客户

Activerecord Rails查找正好有一个订单的所有客户,activerecord,ruby-on-rails-4,Activerecord,Ruby On Rails 4,我有一个数据模型,其中客户有许多订单。我现在需要提取所有只订购1个订单的客户,我在努力弄清楚该怎么做。 < P>考虑客户和订单是ActureCordD类,并考虑您有一个代码行。 在订单类定义中属于:customer。还考虑订单表中有一个名为Customer的ID或索引列,以获取此客户对象。 Customer.joins(:orders).where("count(orders.id) = 1") 考虑客户和订单是活动类,并考虑代码行。 在订单类定义中属于:customer。还考虑订单表中有一个

我有一个数据模型,其中客户有许多订单。我现在需要提取所有只订购1个订单的客户,我在努力弄清楚该怎么做。

< P>考虑客户和订单是ActureCordD类,并考虑您有一个代码行。 在订单类定义中属于:customer。还考虑订单表中有一个名为Customer的ID或索引列,以获取此客户对象。
Customer.joins(:orders).where("count(orders.id) = 1")
考虑客户和订单是活动类,并考虑代码行。 在订单类定义中属于:customer。还考虑订单表中有一个名为Customer的ID或索引列,以获取此客户对象。
Customer.joins(:orders).where("count(orders.id) = 1")
用这个

Customer.joins(:orders).group(:id).having("count(orders.id) = 1")
这将创建如下查询:

从上的客户内部加入订单中选择客户。* orders.customer\u id=按id分组的customers.id countorders.id=1

您将得到所有已经下了一个订单的客户。

使用此选项

Customer.joins(:orders).group(:id).having("count(orders.id) = 1")
这将创建如下查询:

从上的客户内部加入订单中选择客户。* orders.customer\u id=按id分组的customers.id countorders.id=1


您将获得所有恰好下了一个订单的客户。

为了避免对ID字段的引用不明确,将使用以下方法:

Customer.joins(:orders).group("customers.id").having("count(orders.id) = 1")
这将生成以下SQL:

SELECT "customers".* FROM "customers" INNER JOIN "orders" ON "orders"."customer_id" =
"customers"."id" GROUP BY customers.id HAVING count(orders.id) = 1

为了避免对ID字段的引用不明确,将使用以下方法:

Customer.joins(:orders).group("customers.id").having("count(orders.id) = 1")
这将生成以下SQL:

SELECT "customers".* FROM "customers" INNER JOIN "orders" ON "orders"."customer_id" =
"customers"."id" GROUP BY customers.id HAVING count(orders.id) = 1

因为ActiveRecord正确地处理它,所以不会有任何不明确的引用。它将其映射到要获取其记录的模型。请参阅我的答案中生成的SQL查询。我对我的一个应用程序运行了一个与您的SQL语句比较的SQL语句和一个比较的ActiveRecord查询。两者都抛出了模棱两可的错误。但我使用的是Postgres,在SQLite或MySQL中可能会有所不同。因为ActiveRecord正确地处理了它,所以不会有任何模棱两可的引用。它将其映射到要获取其记录的模型。请参阅我的答案中生成的SQL查询。我对我的一个应用程序运行了一个与您的SQL语句比较的SQL语句和一个比较的ActiveRecord查询。两者都抛出了模棱两可的错误。但我使用Postgres,在SQLite或MySQL中可能会有所不同。