Мне нужно отсортировать записи в моей таблице в Rails 4 по значениям в столбце Points
моей модели.Как суммировать значения по общему атрибуту перед сортировкой в Rails
Эта часть проста, но у меня есть дополнительная сложность: я хочу использовать. sum
для всех значений с совпадением user_id
до этого. Другими словами, я хочу получить .order
общие точки, принадлежащие пользователю, которые могут включать в себя несколько значений.
Во-первых, для получения общего порядка, я попробовал:
@orders = Point.order(points: :desc)
@total = @orders.sum(:points)
Это создает общую сумму значений в этой таблице. Тем не менее, я вместо этого хочу использовать .sum
, чтобы добавить значения с совпадением user_id
перед выполнением @orders.
Чтобы быть более понятным, вот что выглядит таблица Points.rb.
Points.rb Пример таблицы
|user_id: 1| points: 10 | game_id 3|
|user_id: 1| points: 20 | game_id 2|
|user_id: 2| points: 50 | game_id 3|
|user_id: 3| points: -10 | game_id 1|
Возможно ли это с MySQL к группе, сумма, а затем сортировать без необходимости создавать новые агрегатные значения в исходной таблице?
Попробуйте User.points.sum (: баллы), Напишите ваше отображение пользователя & вт в точку для более разъяснений –
я удалил свой код выше и попытался запустить ваш. Я получаю 'undefined method' points ''error для User.points.sum (: points). Я также должен отметить, что Пользователь имеет отношение has_many к Points, что заставило меня думать, что это сработает. Пока не повезло. – darkginger