我上课Job
:
class Job < ActiveRecord::Base
has_many :stops
end
Stop
类有一个属性datetime :arrival time
获得所有工作数组的简明方法是什么,按照最早的到达时间在相关的停靠点上排序?
e.g。
如果job_1有两个站点,一个到达时间为下午4点,一个到达时间为下午5点。
job_2有两个站点,一个到达时间为下午3点,一个到达时间为下午6点。
我需要array: [job_2, job_1]
我能够实现这一目标,但是以一种繁琐的方式,包括循环和临时存储值。
谢谢!
答案 0 :(得分:3)
这是一个很好的问题! Francesco的回答应该是你去哪里,但如果你更喜欢使用子系列的连接,你也有其他选择。
Job.includes(:stops).order('stops.arrival_time ASC')
如果您想省略没有任何停靠的作业,请将includes
与joins
交换
答案 1 :(得分:2)
Stop.all.order_by(arrival_time: :asc).select(:job).distinct
将按到达时间排序所有停靠点,然后仅选择唯一的作业。 确保Stop模型具有belongs_to:job。