Activerecord Rails查找正好有一个订单的所有客户
我有一个数据模型,其中客户有许多订单。我现在需要提取所有只订购1个订单的客户,我在努力弄清楚该怎么做。 < P>考虑客户和订单是ActureCordD类,并考虑您有一个代码行。 在订单类定义中属于:customer。还考虑订单表中有一个名为Customer的ID或索引列,以获取此客户对象。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。还考虑订单表中有一个
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中可能会有所不同。