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

Rails sort date by upcoming first, then descending

我有一个约会集合,其中有一个 start_date 日期时间字段。

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

假设我有

我使用相对时间来举例说明,请记住我必须与 Time.now

进行比较的代码
[ in_two_days, two_days_ago, tomorrow, yesterday]

我想要return

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

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

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