Rails按即将到来的顺序排序日期,然后降序

时间:2016-06-25 18:56:12

标签: ruby-on-rails sorting mongoid ruby-on-rails-5 mongoid5

我有一组约会,其start_date日期时间字段。

我需要对这些约会进行排序,所以我有

  • 即将到来的约会
  • 然后是“过去”的约会,最近的第一次
是的,我想我有

我使用相对时间来举例,请记住我必须与Time.now进行比较的代码

[ in_two_days, two_days_ago, tomorrow, yesterday]

我希望返回

[ 
  # First upcoming
  tomorrow, 
  in_two_days,
  # Then most recent first
  yesterday, 
  two_days_ago
]

我正在使用Mongoid,但由于数组中的项目很少,我会接受使用数组方法而不是标准的解决方案(尽管具有mongoid标准的解决方案会更好)

1 个答案:

答案 0 :(得分:1)

upcoming, past = appointments.sort_by(&:start_date).partition{ |a| a.start_date.future? }
sorted = [*upcoming, *past.reverse]