Rails包括has_many关系的第一个关联者

时间:2015-09-17 19:47:16

标签: ruby-on-rails rails-activerecord

很难确定如何在活动记录中构建此查询。我有以下两种型号:

class Event
  has_many :event_times
end

class EventTime
  belongs_to :event
end

EventTime有一个start_time时间戳。我想选择事件,使用分页并按EventTime start_time对它们进行排序。因此,事先有最快的事件发生的事件是第一次。我能够组合一个获取EventTime排序事件的查询,但由于事件可以有多个EventTimes,因此使用分页结果会产生不同数量的记录。

另一个解决方案是执行group_by,然后将分页应用于该结果。但是这需要将所有EventTime加载到不会扩展的内存中。

1 个答案:

答案 0 :(得分:2)

不要害怕加入;只要您在event_id表上设置了event_times的索引,它就会很快。您可以按最小开始时间按事件和顺序进行分组。可以通过将offsetlimit数字传递给查询来实现分页。

Event
  .select('event.*, MIN(event_times.start_time) AS min_start_time')
  .joins(:event_times)
  .group('event.id')
  .order('min_start_time')
  .offset(offset)
  .limit(limit)