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 中实现这一点,如果可以,我该怎么做?

4

1 回答 1

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)")

我希望它会有所帮助!

于 2013-05-18T12:20:54.697 回答