Rails按数组之和对对象进行排序

时间:2014-02-27 04:03:40

标签: ruby-on-rails ruby-on-rails-3

我的每个用户都有一个整数数组。用户参加比赛,我想根据他们阵列的前7个元素的总和对它们进行排序。我知道如何单独完成每个部分,但我不确定如何将它放在一起并在节目中显示。

def show

@competition.users.sort_by{|e| e.daily.first(7).sum}
for comp in @competition.users
  p comp.name
  p comp.daily #Their array
end

这就是我得到前7个元素(目前在我的视图中使用)的总和:

user.daily.first(7).sum

感谢

2 个答案:

答案 0 :(得分:2)

这将按照其总和的降序对用户进行排序。总和最高的用户将位于顶部。删除-进行升序排序

@sorted_users = @competition.users.sort_by{|user| -user.daily.first(7).sum}
for comp in @sorted_users
  p comp.name
  p comp.daily #Their array
end

或者您可以使用sort_by!进行就地排序

@competition.users.sort_by!{|user| -user.daily.first(7).sum}
for comp in @competition.users
  p comp.name
  p comp.daily #Their array
end

答案 1 :(得分:0)

您的代码是正确的,但您没有在任何地方存储已排序的数据

@competition.users.sort_by{|e| e.daily.first(7).sum}.each do |comp|
  p comp.name
  p comp.daily #Their array
end