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]