2014-11-08 10 views
3

У меня есть модель работы, которая принадлежит пользователю, и пользователь has_many заданий. Я хочу создать AR-запрос, который вычисляет общее количество рабочих дней на пользователя, а затем заказы в порядке убывания.rails, activerecord sum then order

меня это до сих пор, но дает мне ошибку: (колонка «Job.id» должен появиться в GROUP BY оговорки или использоваться в агрегатной функции)

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

я не могу похоже, что метод .order работает - есть ли что-то, чего я не вижу? Заранее спасибо!

+1

Do 'Job.group (: user_id) .select ('SUM (total_days) as tot'). Order ('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

Существующих ответов не работал для меня, я должен был немного изменить метод group. Если бы я использовал ваши модели (то есть пользователь), мне нужно было бы перечислять каждый отдельный атрибут пользователя в групповом методе.

т.е. что-то вроде:

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

Я не знаю, если это будет на самом деле работает в вашей ситуации, но потратив раздражающее количество времени по этому вопросу, я думал, я бы поделиться тем, что работало для меня.

Смежные вопросы