Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails包括由具有多个关系的第一个关联方订购的_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails Rails包括由具有多个关系的第一个关联方订购的

Ruby on rails Rails包括由具有多个关系的第一个关联方订购的,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,很难弄清楚如何在活动记录中构建此查询。我有以下两种型号: class Event has_many :event_times end class EventTime belongs_to :event end EventTime有一个开始时间戳。我想使用分页选择事件,并按事件时间开始时间排序。所以事件时间最快的事件是第一个。我能够组合一个查询来获取按EventTime排序的事件,但是使用分页会导致不同数量的记录,因为一个事件可以有多个EventTime 另一种解决方案是执行group

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

class Event
  has_many :event_times
end

class EventTime
  belongs_to :event
end
EventTime有一个开始时间戳。我想使用分页选择事件,并按事件时间开始时间排序。所以事件时间最快的事件是第一个。我能够组合一个查询来获取按EventTime排序的事件,但是使用分页会导致不同数量的记录,因为一个事件可以有多个EventTime


另一种解决方案是执行group_by,然后对该结果应用分页。但这需要将所有事件时间加载到无法扩展的内存中

不要害怕加入;只要在
event\u times
表中为
event\u id
设置了索引,它就会很快。您可以按事件分组,并按最短开始时间排序。分页可以通过向查询传递
偏移量
限制
数字来实现

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)

查询中是否也应考虑过去具有
事件时间的
事件(即
开始时间
)呢?EventTime上有一个结束时间。因此,是的,我包括过去有开始时间的事件时间,只要结束时间在未来。但这与手头的问题无关,而是你构建问题的方式。你说“最快的事件时间是第一个”。这意味着排序不应该是按
开始时间
,而应该是
开始时间
时间之间的绝对差异。现在
,除非您过去没有将事件时间包含在
开始时间
中。太好了。。。MIN()是我所缺少的。谢谢