我有一个包含许多EventDate的Event模型。

EventDate具有start_time属性,Event具有next_occurrence方法,该方法使用最近的start_time查找属于它的EventDate。

我想找到next_occurrence排序的前5个事件(最早出现)。

我以为我可以通过以下方式实现这一目标:

Event.joins(:event_dates).order('event_dates.start_time').limit(5)

但这是不对的-如果我随后收集next_occurrence日期,则它们的顺序不正确。

我如何查询它以返回由next_occurrence排序的事件?

最佳答案

试试这个:

next_5_events = EventDate.select('event_id, min(date) as next_event_date')
                         .includes(:event)
                         .where('next_event_date > ?', Time.now)
                         .group(:event_id)
                         .order(:next_event_date)
                         .limit(5)
                         .map(&:event)

说明:

为将来的每个Event查找最近的EventDate
EventDate.select('event_id, min(date) as next_event_date')
         .where('next_event_date > ?', Time.now)
         .group(:event_id)

仅保留next_event_date排序的前5个事件
         .order(:next_event_date)
         .limit(5)

照原样,该请求将仅返回event_idnext_event_date,因此以下几行急于加载并返回Event对象
         .includes(:event)
         .map(&:event)

关于ruby-on-rails - 关联属性的订单模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23334736/

10-10 03:53