【问题标题】:Rails sort date by upcoming first, then descendingRails 按即将到来的日期排序,然后降序
【发布时间】:2023-03-16 07:22:02
【问题描述】:

我有一个约会集合,其中有一个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 标准的解决方案会更好)

【问题讨论】:

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


    【解决方案1】:
    upcoming, past = appointments.sort_by(&:start_date).partition{ |a| a.start_date.future? }
    sorted = [*upcoming, *past.reverse]
    

    【讨论】:

    • 如果我应该更详细地解释,请告诉我。
    • 不,这很好,谢谢!最后的评论是将partition(&:future?) 更改为partition { |ap| ap.start_date.future? },但为了更简单,我还在我的约会模型中定义future?,所以你的答案有效。
    • 哦,我的错。你当然是对的。我将相应地编辑答案以使其与问题相匹配。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多