Arel查询关联列的总和

时间:2015-10-08 00:23:02

标签: ruby-on-rails activerecord arel

我有Bill的模型has_many_charges

我正在进行一项查询,该查询将产生所有费用总计x金额的账单。我查看了Arel's文档,但还没有找到形成此查询的正确方法。

我试过了:

bills.join(charges)
.on(bills[:id].eq(charges[:bill_id]))
.where(charges.project(charges[:dollars].sum.lt(100)))

然而,当我执行此操作时(在使用ActiveRecord执行之前调用to_sql),我一直遇到语法错误。我不熟悉Arel,所以我不确定如何改进这个。任何帮助将不胜感激,谢谢

1 个答案:

答案 0 :(得分:0)

你能解释一下这是如何设置的吗?

如果Bill has_many :chargescharges:bill_id字段,您应该可以致电。 Bill.find(id).charges。如果可行,您可以在where上调用charges查询。

因此,如果您正在寻找价格为100的账单。

bill = Bill.find(id)
bill.charges.where(dollars: 100)

如果你想要一个范围,你可以提供一个范围:

bill.charges.where(dollars: 90..110)
根据评论

编辑

bill.rb

def self.select_bills(amount)
  all.select { |bill| bill.sum_of_charges >= amount }
end

def sum_of_charges
  charges.pluck(:dollars).sum  
end

打电话。

Bill.select_bills(100)