2011-04-09 2 views
1

두 가지 모델 User and Purchase가 있습니다. User has_many :purchasesPurchase belongs_to :userRuby on Rails, 구매로 주문한 상위 5 위 사용자

구매 필드는 다음과 같습니다 User.top_five이되는 즉, 가장 높은 구매 값으로 5 사용자를 반환 :

id, product_id, user_id, amount, created_at 

이 무엇을 달성하려고하는 것은 메소드 호출 등이다 각 사용자에 대한 purchases.amount 필드의 합계.

또한 User.top_five(:start_date=>'01/01/2010',:end_date=>'31/12/2010')과 같은 작업을 수행 할 수 있습니다. 즉, 상위 5 명의 사용자를 계산하는 기간을 선택하고 싶습니다.

그래서 조인, 합계, order_bys 등의 올바른 조합을 얻으려고했지만 그만 얻지 못했습니다. 그래서 누군가가 올바른 방향으로 나를 가리킬 수 있기를 바랍니다! 바라건대 여기에 충분한 정보를 주셨습니다. 이것이 제 첫 질문입니다.

덕분에

답변

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 
+0

감사 마르셀 같은 것을 제안한다. 나는 약간의 SQL을 조정해야했다. 그러나 그것은 명확히 나를 도왔다. – Paul