我有以下模特:
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是否支持允许此选项?如果没有,这可以在单行中优雅地完成吗?
答案 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 []>
。