如何在两个字段中对ruby / rails进行排序?

时间:2012-02-04 18:39:25

标签: ruby-on-rails ruby

例如,我想按game_date排序,然后如果日期相同,按团队排序?最好的方法是什么?

@teams = @user.teams
@games = @teams.reduce([]) { |aggregate, team| aggregate + team.games}.sort_by(&:game_date)

5 个答案:

答案 0 :(得分:94)

最好的方法是让你的数据库这样做,但如果你想使用Ruby:

@games = @data.sort_by {|x| [x.game_date, x.team] }

Array的排序行为是按第一个成员排序,然后排序第二个,然后是第三个,依此类推。由于您希望将日期作为主键,将团队作为第二个,因此这两个数组中的数组将按您希望的方式排序。

答案 1 :(得分:25)

@teams = @user.teams
@games = @teams.games.order("game_date ASC, team ASC")

答案 2 :(得分:4)

@teams = @user.teams 
@games = @teams.games.order(game_date: :asc, team: :asc)

答案 3 :(得分:2)

假设您有一个具有这两个字段的模型

Model.all(:order =>'attribute1,attribute2')

如果字段在多个表中,则可以使用连接。

答案 4 :(得分:0)

对于那些希望对包含具有不同命名日期字段的两个不同对象的数组进行排序的人,可以使用模型中的属性别名方法执行此操作。

注意:使用.sort_by!破坏性地不起作用。

News.rb

def release_date
    self.publish_date
end

控制器

@grid_elements = @news + @albums
@grid_elements = @grid_elements.sort_by(&:release_date)