如何获得包含嵌套关系的完整列表?

时间:2012-03-20 11:28:09

标签: ruby-on-rails ruby-on-rails-3 activerecord map associations

我有一个与活动相关的任务模型,我希望得到一个包含所有任务及其相关活动的数组/哈希,如下所示:

<% task_group =[
     ['Task1', {'Activity1' => 1, 'Activity2' => 2}], 
     ['Task2', {'Activity3' => 3, 'Activity4'=> 4}]
    ] %>

我想出了Task.includes(:activities).all.map(&:name),但这只给了我一个包含活动和名字的列表。

如何获得包含嵌套关系的完整列表?

我的模特定义:

class Task < ActiveRecord::Base
  has_many :activities

class Activity < ActiveRecord::Base
  belongs_to :task

1 个答案:

答案 0 :(得分:1)

你可以使用:

Task.includes(:activities).all.map{|t| [t.name, t.activities.inject({}){|H, a| H[a.name] = a.id; H}]}

修改

Task.includes(:activities).all.map{|t| [t.name, t.activities.inject({}){|h, a| h[a.name] = a.id; h}]}