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

时间:2011-04-09 16:23:10

标签: ruby-on-rails

我有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等的正确组合,但我只是没有得到它。所以希望有人可以指出我正确的方向! 希望我在这里给出足够的信息,这是我的第一个问题。

感谢

1 个答案:

答案 0 :(得分:3)

我建议像

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