【问题标题】:Rails group_by with empty resultsRails group_by 结果为空
【发布时间】:2016-09-15 12:33:17
【问题描述】:

我有以下型号:

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 是否支持允许这样做的选项?如果没有,这可以在单行中优雅地完成吗?

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    TaskCategory.all.includes(:task) 会工作,不是吗?您返回的数据格式会略有不同,但差别不大。

    【讨论】:

    • 是的,你是对的,使用包含允许我在不触发额外查询的情况下迭代集合。
    • @Donato 它只是 eager_loading
    【解决方案2】:

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

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

    没有tasksTaskCategory 将产生#&lt;ActiveRecord::Relation []&gt;,这在某种程度上等同于[]

    【讨论】:

      猜你喜欢
      • 2012-03-03
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 2020-04-10
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多