我有两个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环境]
答案 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