0

我有以下表格:

用户:has_many 购买
项目:has_many 购买

项目有一个“金额”列(可以是+或-),我需要找到所有具有“Item.amounts”正和的用户(每个人所做的所有购买)。

这个查询看起来如何?(在这种情况下,我不确定如何正确处理“SUM”。)

我从以下开始,但显然,这是错误的......(它不会“包括”具有负 Item.amount 的项目的购买......)

@users = User.find(:all,
:include => {:purchases => :item},
:select => "SUM(item.amount)",
:order => "...",
:conditions => "...",
:group => "users.id",
:have => "SUM(item.amount) > 0" )

感谢您对此的帮助!
汤姆

4

2 回答 2

1

尝试这个:

User.all(:joins => items, :group => "users.id", 
          :having => "SUM(items.amount) > 0")
于 2010-07-07T20:42:26.417 回答
0

听起来这对于某些模型方法来说是一个很好的案例。

我没有对此进行测试,但我认为您想做类似于以下的事情:

class User < ActiveRecord::Base

has_many :purchases
has_many :items, :through => :purchases

def items_total
  #get all the items iterate over them to get the amount, 
  #compact to get rid of nils
  #and reduce with a sum function to total and return
  items.all.each{|item| item.amount}.compact.reduce(:+)
end

然后

User.items_total

于 2010-07-07T19:23:06.247 回答