创建基于子类

时间:2015-05-08 12:30:45

标签: ruby-on-rails sorting

我上课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]

我能够实现这一目标,但是以一种繁琐的方式,包括循环和临时存储值。

谢谢!

2 个答案:

答案 0 :(得分:3)

这是一个很好的问题! Francesco的回答应该是你去哪里,但如果你更喜欢使用子系列的连接,你也有其他选择。

Job.includes(:stops).order('stops.arrival_time ASC')

如果您想省略没有任何停靠的作业,请将includesjoins交换

答案 1 :(得分:2)

Stop.all.order_by(arrival_time: :asc).select(:job).distinct

将按到达时间排序所有停靠点,然后仅选择唯一的作业。 确保Stop模型具有belongs_to:job。