Как исключить строки, которые соответствуют критериям, основанным на значении одной строки в activerecord? - PullRequest
0 голосов
/ 03 апреля 2019

Я использую ActiveAdmin, и у меня есть эта область, которая показывает заказы с истекающими подписками:

scope: expired do |orders|
  orders
    .joins(:subscriptions)
    .group('orders.id')
    .having('MIN(subscriptions.end_date) < ?', Time.now.end_of_day)

И у меня есть настройка заказов, где они могут иметь несколько подписок, поэтому, если срок действия одной подписки истек, а одна -нет, тогда эта область все еще покажет этот порядок.

Итак, в этом случае у меня есть что-то вроде набора результатов, которые возвращают что-то вроде этого:

enter image description here

и произнеситедата 24.02.19, я хотел бы иметь возможность исключить все строки с идентификатором 14010497, так как не все подписки истекли.Как бы я сделал это в activerecord?Я пытался использовать NOT IN примерно так:

where('orders.id NOT IN (SELECT DISTINCT id from distributions WHERE distributions.end_date < ?)', но я думаю, что я использую неправильно.

1 Ответ

1 голос
/ 04 апреля 2019

Try,

scope: expired do |orders|
  orders
    .joins(:subscriptions)
    .group('orders.id')
    .where('subscription.end_date < ?', Time.now.end_of_day)
    .having('count(subscriptions.id) = ?', 0)
end

Даст просроченные заказы со всеми просроченными подписками

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...