我有一个包含许多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_id
和next_event_date
,因此以下几行急于加载并返回Event
对象 .includes(:event)
.map(&:event)
关于ruby-on-rails - 关联属性的订单模型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23334736/