我有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,所以我不确定如何改进这个。任何帮助将不胜感激,谢谢
答案 0 :(得分:0)
你能解释一下这是如何设置的吗?
如果Bill
has_many :charges
和charges
有: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)