Моими соответствующими таблицами БД являются таблица Счета-фактуры и Таблица авансовых платежей с отношением has_many (в счете-фактуре много авансов). Я пытаюсь сгенерировать запрос ActiveRecord, который будет возвращать все счета за исключением тех, которые прикреплены к любым авансам advance_type:: pre_settlement.
Мой текущий запрос:
@invoices = invoices.left_joins(:advances).
where.not('advances.advance_type': :pre_settlement).
distinct.
order(period_ends_at: :desc, created_at: :desc)
Это приводит к следующему SQL:
SELECT "invoices".* FROM "invoices" LEFT OUTER JOIN "advances" ON "advances"."invoice_id" = "invoices"."id" WHERE "advances"."advance_type" != $1 [["advance_type", "pre_settlement"]]
Проблема заключается в том, что в ситуациях, когда счет-фактура имеет несколько авансов, как Если хотя бы один аванс составляет advance_type != :pre_settlement
, этот счет будет включен. Я хочу убедиться, что любые счета, которые прикреплены хотя бы к одному предварительному расчету, будут исключены.