私たちのシステムで「未払い」イベントのコレクションを見つけようとしています。Postgres データベースを使用して Rails 3.2 を実行しています。
データ構造は以下の通りです。
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でこれを達成することは可能ですか?もしそうなら、どうすればそれを実現できますか?