1

我正在嘗試在我們的系統中找到「欠薪」事件的集合。我們使用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的實現這一點,如果是的話,我該怎麼做呢?

回答

1

嘿,我認爲在SQL它應該是這樣的

select * from events where 
(select sum(charges.total) from charges where charges.event_id = events.id) > 
(select sum(transactions.total) from transactions where 
transactions.event_id = events.id) 

所以現在你可以建立的範圍,想

scope :unpaid, find_by_sql("select * from events where 
(select sum(charges.total) from charges where charges.event_id = events.id) > 
(select sum(transactions.total) from transactions where 
transactions.event_id = events.id)") 

我希望這將有助於!

相關問題