获取客户端,而最近的订单

问题描述 投票:0回答:1

我有一个网上订购功能在我的应用程序,我想拉那些没有上周(我有一个字段:clients跟踪此)内提交订单的所有: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范围,并返回客户,其orders.within_last_week是空的。

有没有办法做到这一点,而无需通过所有客户端循环?

ruby-on-rails associations
1个回答
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")
© www.soinside.com 2019 - 2024. All rights reserved.