提取没有最近订单的客户

时间:2019-02-11 18:33:20

标签: ruby-on-rails associations

我的应用程序中具有在线订购功能,我想撤消所有在上周内提交订单的:clients(我有{{1 }}进行跟踪。

:submitted_at

我几乎希望能够使用此class Order < ApplicationRecord belongs_to :client scope :within_last_week, -> { where("submitted_at >= ?", 1.week.ago )} end class Client < ApplicationRecord has_many :orders end 范围并返回:within_last_week为空的客户端。

有没有一种方法可以在不循环访问所有客户端的情况下?

1 个答案:

答案 0 :(得分:0)

以下是解决此问题的一种方法,将订单和客户合并为一种关系,同时将客户关系设置为 left_outer_joins ,以使所有没有订单的客户也都获得:

Order.left_outer_joins(:client).select("clients.name, SUM(CASE WHEN submitted_at >= '12/01/2019' THEN 1 ELSE 0 END) as total_orders").having("total_orders = 0").group("clients.id")

另一种方式:

Order.left_outer_joins(:client).where("orders.submitted_at >= '12/01/2019' ").having("SUM(orders.id) = 0").group("clients.id")