Ruby on Rails,通过购买订购前5名用户
我有2个型号,用户和购买。 User has_many :purchases
和Purchase 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