Я пытаюсь найти коллекцию «недоплаченных» событий в нашей системе. Мы запускаем Rails 3.2 с использованием базы данных Postgres.Активная запись: поиск коллекции по сумме двух связанных таблиц
Структура данных выглядит следующим образом.
class Event < ActiveRecord::Base
has_many :charges
has_many :transactions
end
class Charge < ActiveRecord::Base
belongs_to :event
end
class Transaction < ActiveRecord::Base
belongs_to :event
end
Недоплаченные события определяются как те, в которых общие сборы превышают общие транзакции.
sum(charges.total) > sum(transactions.total)
Мои умения SQL плохой, и я пытался выполнить это с помощью ActiveRecord. Это моя последняя попытка, но она не возвращает правильную коллекцию. В частности, это, как представляется, включает полностью оплаченные события, в которых было более одной транзакции.
Event.joins(:charges,:transactions).group('charges.event_id, transactions.event_id').having("sum(charges.total) > sum(transactions.total)")
Возможно ли достичь этого в ActiveRecord, и если да, то как я могу это сделать?