2016-05-18 4 views
1

、私は次のモデルを持って、空の結果とGROUP_BY: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, ...>] 
} 

問題は、私はすべてのタスク・カテゴリが返さたいですタスクコレクションが空であってもしたがって、次のようなものが動作します。

この場合、タスクカテゴリにはタスクがないため、値は空の配列です。 group_byはこれを許可するオプションをサポートしていますか?そうでない場合は、これを1ライナーでエレガントに行うことができますか?

答えて

2

TaskCategory.all.includes(:task)それは効きませんか?戻ってくるデータは、やや異なった形式になりますが、それほど大きくはありません。

+0

はい、あなたは正しいと思います。インクルードを使用すると、追加のクエリを実行せずにコレクションを繰り返し処理できます。 – Donato

+0

@Donatoそのeager_loading – 7urkm3n

0

TaskCategory.allの場合は、必要なカテゴリでタスクをグループ化できます。形式はまったく同じではありませんが、それでもあなたがそれを望むようにグループ化:なしtasksでA TaskCategory

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

[]に多少相当する#<ActiveRecord::Relation []>をもたらすであろう。