【发布时间】:2018-08-18 03:25:58
【问题描述】:
我有一个包含许多时间槽的事件模型(从和到属性是日期时间)。
我正在根据事件是即将到来的、过去的还是当前的来过滤事件。
这是我的查询
Event.includes(:time_slots).by_upcoming.order("time_slots.from asc").distinct
假设我有两个即将到来的事件 - Event1(时间槽:昨天 12:00-13:00 和明天 12:00-13:00)和 Event2(时间槽:10:00-11:00 前两天和一天- 10:00-13:00后)
由于这些符合即将发生的事件,我需要将 Event1 列在 Event2 之前,因为 Event1(明天)的即将到来的时段发生在 Event2 的即将到来的时段(后天)之前
这些是我在 TimeSlot 模型中的作用域
scope :future, -> { where(from: DateTime.current..DateTime.current+20.years) }
在事件模型中
scope :by_upcoming, -> { where(id: TimeSlot.future.map(&:event_id)) }
但是,事件 2 列在事件 1 之前,因为最早的时间段是事件 2,即两天前。如何仅根据范围(by_upcoming)而不是所有时隙过滤掉的结果(时隙)进行排序?
【问题讨论】:
-
也许只是
.reverse到集合数组吗? -
不会的。以上两个只是例子。
标签: ruby ruby-on-rails-5