У меня есть модель Invoice
, которая has_many
линий и has_many
платежей.Rails/SQL: поиск счетов, проверка двух сумм
Invoice:
id
ref
Line:
invoice_id:
total (decimal)
Payment:
invoice_id:
total(decimal)
Мне нужно найти все оплаченные счета-фактуры. Поэтому я делаю следующее:
Invoice.joins(:lines, :payments).having(' sum(lines.total) = sum(payments.total').group('invoices.id')
Какие запросы:
SELECT *
FROM "invoices"
INNER JOIN "lines" ON "lines"."invoice_id" = "invoices"."id"
INNER JOIN "payments" ON "payments"."invoice_id" = "invoices"."id"
GROUP BY invoices.id
HAVING sum(lines.total) = sum(payments.total)
Но всегда возвращает пустой массив, даже если есть счета оплачены полностью.
Что-то не так с моим кодом?
Так «оплаченные счета» определены .. как? 'sum (total)' всех связанных строк в строке 'равно 'sum (total)' всех связанных строк в 'payment'? –