Rails group_by结果为空

时间:2016-05-18 20:26:49

标签: ruby-on-rails

我有以下模特:

class Task
  belongs_to :task_category
end

class TaskCategory
  has_many :tasks
end

我想按任务类别对任务进行分组,这对我有用:

Task.all.group_by(&:task_category)
# => 
{
  #<TaskCategory id: 1, name: "call", ... } =>[#<Task id: 1, ...>, #<Task id: 2, ...>], 
  #<TaskCategory id: 2, name: "event", ... } =>[#<Task id: 3, ...>, #<Task id: 4, ...>]
}

问题是我想要返回所有任务类别,即使任务集合为空。因此,这样的事情会起作用:

#<TaskCategory id: 3, name: "todo", ... } =>[]

在这种情况下,任务类别没有任务,因此值为空数组。 group_by是否支持允许此选项?如果没有,这可以在单行中优雅地完成吗?

2 个答案:

答案 0 :(得分:2)

TaskCategory.all.includes(:task)不会工作吗?您获得的数据格式略有不同,但不是很明显。

答案 1 :(得分:0)

如果您只是执行TaskCategory.all,则可以按照您需要的类别分组任务。格式不完全相同,但仍按您希望的方式分组:

TaskCategory.all
# Assuming the first TaskCategory has no tasks
TaskCategory.all.first.tasks
=> #<ActiveRecord::Relation []>

没有TaskCategory的{​​{1}}会产生tasks,这有点等同于#<ActiveRecord::Relation []>