【问题标题】:Sorting events based on their start date根据开始日期对事件进行排序
【发布时间】:2014-03-11 21:31:10
【问题描述】:

我想在页面上显示事件列表,以便事件将根据其开始日期进行排序,但已经过去的事件应该出现在列表的底部,目前我正在使用这个查询对事件进行排序,但这个不是有效的,因为它显示了已经发生在顶部的事件

Event.select("id , name, date_begin, date_end, user_id, moderator_name, moderator_phone, contact_phone, time_zone, url").order("date_begin asc")

请帮帮我!

【问题讨论】:

  • 我以前见过这样的排序尝试,但并不好玩 - 祝先生/女士好运。

标签: mysql ruby-on-rails sorting activerecord ruby-on-rails-4


【解决方案1】:

我建议您将查询分为两部分,即将发生的事件和过去的事件。这提高了可读性和可用性。

@upcoming_events = Event.where('date_begin >= ?', DateTime.now)
@past_events = Event.where('date_begin < ?', DateTime.now)

通过将这些作为方法添加到模型中,您可以更加 OOP。

【讨论】:

  • 你能帮我解决这个问题吗?如何将其分成两部分?
  • @RSB 当然,你想使用 Active Records 吗?
  • 我对活动记录和sql查询都很好
  • 我们可以在一个查询中完成吗?
  • @RSB 您想从将它们添加到单个查询中得到什么?
【解决方案2】:

试试这个:

@upcoming, @past = Event.order('date_begin DESC').partition{ |e| e[:date_begin] >= DateTime.now }

你会得到两个数组。第一个是即将发生的事件,第二个是已经过去的事件。

更新:

要颠倒顺序,只需使用:

@upcoming, @past = Event.order('date_begin DESC').partition{ |e| e[:date_begin] >= DateTime.now }
@past.reverse!

【讨论】:

  • 太棒了,但是如果我们希望两者都以不同的方式排序呢?
  • 从您的问题看来,您希望它们都采用相同的排序方式
  • 我不这么认为。查询后排序呢?
  • 它通常会影响对象本身,而不会使@past =。但在这种情况下,我现在看到没有区别。
  • 嘿!如果您只想反转它,则无需再次排序,因为在您的查询中您对其进行了排序。你只需要@past.reverse!...
【解决方案3】:

我认为您的查询应该是这样的。

@upcoming_events = Event.where('date_end >= ?', DateTime.now).order('date_begin DESC')
@passed_events = Event.where('date_end < ?', DateTime.now)

【讨论】:

  • 我们可以在一个查询中完成吗?
猜你喜欢
  • 2018-04-30
  • 2019-03-17
  • 2018-09-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多