Rails сортирует дату по убыванию, затем по убыванию

У меня есть коллекция назначений, которые имеют start_date Поле DateTime.

Мне нужно отсортировать эти встречи, поэтому у меня есть

  • Предстоящие встречи в первую очередь
  • Затем "прошлые" назначения, самые последние сначала

Т.е. предположим, у меня есть

Я использую относительное время, чтобы привести пример, помните о коде, который я должен сравнить с 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 ответ

Решение
upcoming, past = appointments.sort_by(&:start_date).partition{ |a| a.start_date.future? }
sorted = [*upcoming, *past.reverse]
Другие вопросы по тегам