Получить клиентов без недавнего заказа - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть функция онлайн-заказа в моем приложении, и я хотел бы вытащить все :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 пусто.

Есть ли способ сделать это без зацикливания всех клиентов?

1 Ответ

0 голосов
/ 11 февраля 2019

Ниже приведен один из способов решения этой проблемы путем объединения заказов и клиентов в одно отношение при установке отношений клиента на 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")
...