Rails,Ruby,如何对数组进行排序?

时间:2011-04-21 03:24:49

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

在我的rails应用程序中我正在创建一个这样的数组:

@messages.each do |message|

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

制作完这个数组之后,我想按照time_ago ASC的顺序对它进行排序,这可能吗?

6 个答案:

答案 0 :(得分:131)

 @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 }
}

答案 1 :(得分:10)

你可以这样做:

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

答案 2 :(得分:8)

在rails 4+

@list.sort_by(&:time_ago)

答案 3 :(得分:5)

您也可以@list.sort_by { |message| message.time_ago }

答案 4 :(得分:4)

仅供参考,我没有看到将消息移动到新列表然后对它们进行排序的重点。只要它是ActiveRecord就应该在我看来查询数据库时直接完成。

看起来你应该能够这样做:

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

除非我误解了目的,否则这应该足够了。

答案 5 :(得分:1)