Подтвердить что ты не робот

Как сортировать в ruby ​​/rails на двух полях?

Например, я хотел бы сортировать по game_date, а затем, если дата такая же, сортируйте ее по команде? Какой был бы лучший способ сделать это?

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

Ответ 1

Лучшим способом было бы сделать вашу базу данных, но если вы хотите использовать Ruby:

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

Поведение сортировки Array заключается в сортировке по первому члену, затем по второму, затем по третьему и т.д. Поскольку вы хотите, чтобы дата была как ваш первичный ключ, а команда - второй, массив из этих двух будет сортироваться так, как вы хотите.

Ответ 2

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

Ответ 3

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

Ответ 4

Предполагая, что у вас есть модель, у которой есть эти два поля

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

Если поля находятся в нескольких таблицах, вы можете использовать объединения.

Ответ 5

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

note: используя .sort_by! деструктивно не работает.

News.rb

def release_date
    self.publish_date
end

Controller

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