2014-11-08 2 views
3

나는 belongs_to User와 User has_many jobs 인 Job 모델을 가지고있다. 사용자 당 총 작업 일수를 계산 한 AR 쿼리를 작성한 다음 내림차순으로 주문합니다.레일, activerecord sum 다음에 주문

지금까지이있다, 그러나 나에게 오류주고있다 :

@work_days = Job.group(:user).order('SUM(total_days)') 

난 못해 (GROUP BY 절에 나타나야합니다 또는 집계 함수에 사용되는 열 "Job.id을") .order 메서드가 작동하는 것 같습니다. 누락 된 것이 있습니까? 미리 감사드립니다!

+1

Do'Job.group (: user_id) .select ('SUM (총 일수) as tot') 주문 ('tot desc')'... –

+1

놀라운, 고마워! – gitastic

답변

8

당신은 당신의 쿼리를 작성할 수있다 : -

Job.group(:user_id).select('SUM(total_days) as tot').order('tot desc') 
5

을 약간 변형으로 이전

Job.group(:user_id).order('sum_total_days DESC').sum(:total_days) 
+0

쿨링 아이디어 .. :-) –

0

기존의 답변에서 나를 위해 didnt 한 일을, 나는 약간 group 방법을 수정했다. 내 모델 (예 : 사용자)을 사용하는 경우 그룹 메소드의 모든 단일 사용자 속성을 나열해야합니다. 같은

즉 뭔가 :

user_attrs = User.new.attributes.keys.map { |key| "users.#{key}" }.join(",") 
Job.group(user_attrs).order('sum_total_days DESC').sum(:total_days) 

이 실제 상황에서 일 것이다하지만 난 나를 위해 일한 무엇을 공유 할 것이라고 생각이 문제에 대한 시간의 성가신 금액을 지출 한 경우 모르겠어요.