[英]Rails, Ruby, how to sort an Array?
在我的rails应用程序中,我正在创建一个这样的数组:
@messages.each do |message|
@list << {
:id => message.id,
:title => message.title,
:time_ago => message.replies.first.created_at
}
end
在制作这个数组之后,我想通过time_ago ASC命令对它进行排序,这可能吗?
@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 }
}
你可以这样做:
@list.sort {|a, b| a[:time_ago] <=> b[:time_ago]}
在轨道4+
@list.sort_by(&:time_ago)
你也可以做@list.sort_by { |message| message.time_ago }
@list.sort_by { |message| message.time_ago }
仅供参考,我没有看到将消息移动到新列表然后对它们进行排序的重点。 只要它是ActiveRecord就应该在我看来查询数据库时直接完成。
看起来你应该能够这样做:
@messages = Message.includes(:replies).order("replies.created_at ASC")
除非我误解了目的,否则这应该足够了。
是的,你可以使用group_by:
http://api.rubyonrails.org/classes/Enumerable.html#method-i-group_by
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.