Rails中的关联模型和SUM查询

时间:2010-12-05 20:34:23

标签: ruby-on-rails-3 associations sum

我有两个Rails模型,一个孩子和一个家长说。

我知道我可以这样做:

Child.sum(:income, :conditions => "parent_id = #{@parent_id}")

但我希望能够做到这一点:

Parent.children.sum(:income)

但如果我尝试的话,这给了我错误的价值观。是否有更简洁的写作方式

Child.sum(:income, :conditions => "parent_id = #{@parent_id}")

TIA

[ps:Rails 3 dev环境]

4 个答案:

答案 0 :(得分:13)

很抱歉,我刚刚找到答案。我需要将to_a添加到Child对象的集合中,并调用proc,如下所示:

Parent.children.to_a.sum(&:income)

这很有魅力。

答案 1 :(得分:4)

很抱歉打破旧线程,但我认为我找到了更好(最好?)的解决方案。下面是我最终的项目代码

self.purchases.where(:script_id => script_id, :approved => true).sum(:instances)

它生成一个完全符合我需要的查询

SELECT SUM("purchases"."instances") AS sum_id FROM "purchases" WHERE "purchases"."customer_id" = 1 AND "purchases"."script_id" = 1 AND "purchases"."approved" = 't'

答案 2 :(得分:3)

我遇到了一个孩子委托给父母的问题,我需要找一笔钱。

children.to_a.sum(:parent_income)

给了我一个主要的N + 1问题。解决方案是使用:

children.joins(:parent).sum(:income)

答案 3 :(得分:0)

我也遇到了类似的情况,这里是rails 4中的解决方案,同时还检查被计算的项目是处于活动状态还是非活动状态。我在保存之前在模型中运行了这个。

order_items.collect { |oi| oi.valid? ? (oi.quantity * oi.price) : 0 }.sum