Ruby on Rails,通过购买订购前5名用户

我有2个型号,用户和购买。 User has_many :purchasesPurchase belongs_to :user

购买领域是:

 id, product_id, user_id, amount, created_at 

我想要实现的是一个方法调用,例如: User.top_five ,它将返回具有最高购买价值的5个用户,即每个用户的purchases.amount字段的总和。

我也希望能够做类似User.top_five(:start_date=>'01/01/2010',:end_date=>'31/12/2010')事情,即选择一个时间段来计算前五个用户。

所以我一直在努力获得连接,总和,order_bys等的正确组合,但我只是没有得到它。 所以希望有人可以指出我正确的方向! 希望我在这里给出足够的信息,这是我的第一个问题。

谢谢

我建议像

 def self.top_five(start_date, end_date) User.all(:select => "users.*, SUM(purchased.amount) as purchased_sum", :joins => "LEFT JOIN purchases AS purchased ON purchased.user_id = users.id", :group => "users.id", :conditions => ["purchased.created_at BETWEEN ? AND ?", start_date, end_date], :order => "purchased_sum DESC", :limit => 5) end