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

Rails, Ruby, как отсортировать массив?

в моем приложении rails Я создаю такой массив:

@messages.each do |message|

  @list << {
    :id => message.id,
    :title => message.title,
    :time_ago => message.replies.first.created_at
  }
end

После создания этого массива я хотел бы отсортировать его по порядку по времени ASC, возможно ли это?

4b9b3361

Ответ 1

 @list.sort_by{|e| e[:time_ago]}

по умолчанию используется ASC, однако если вы хотите DESC вы можете сделать:

 @list.sort_by{|e| -e[:time_ago]}

Также кажется, что вы пытаетесь создать список из @messages. Вы можете просто сделать:

@list = @messages.map{|m| 
  {:id => m.id, :title => m.title, :time_ago => m.replies.first.created_at }
}

Ответ 2

Вы можете сделать:

@list.sort {|a, b| a[:time_ago] <=> b[:time_ago]}

Ответ 3

Вы также можете сделать @list.sort_by { |message| message.time_ago }

Ответ 4

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

Похоже, вы должны сделать это следующим образом:

@messages = Message.includes(:replies).order("replies.created_at ASC")

Этого должно быть достаточно, если я не понял эту цель.

Ответ 5

В рельсах 4+

@list.sort_by(&:time_ago)