如何按属性将集合拆分为数组

时间:2014-07-29 08:03:38

标签: ruby-on-rails split

我有以下型号

class BackupJob
  has_many :backup_controls

  def controls_for_date(date)
    return self.backup_controls.where("control_date > ?", date.beginning_of_day).where("control_date < ?", date.end_of_day)
  end
end

class BackupControl
  attr_accessible :status, :control_date

end

我希望在某个特定日期获得BackupControls的集合,并将它们分成不同的数组,每个状态一个。

controls = backup_job.controls_for_date(date)
controls.sort{|x,y| x.backup_control_status <=> y.backup_control_status}

将我的集合拆分为单独的数组的最佳方法是什么,每个状态一个?

2 个答案:

答案 0 :(得分:1)

也许您可以使用group_by,传入&:backup_control_status

答案 1 :(得分:0)

正如@Sergio所说,如果你想要一个排序的BackupControls集合,你应该首先按control_date对它进行排序,然后按照状态对它进行排序。这样的事情:

controls = backup_job.controls_for_date(date).sort_by(&:control_date).group_by(&:status)

这会给你一个Hash,键是状态,值是BackupControls的数组。