想要在Ruby中创建一个包含项目数组的哈希数组

时间:2014-04-05 05:41:39

标签: ruby-on-rails ruby

我很难搞清楚如何做到这一点。我有一组从where查询返回的项目。每个项目都属于一个菜单。我想创建一个名为菜单的数组,其中包含项目菜单的名称,然后创建项目的子数组,但我无法弄清楚这一点。

我想(假设“蓝色”和“红色”是菜单的名称):

  menus:["blue":
          {"items":["ocean","sky"]}],
         "red"  
          {"items":["fire","sunset"]}]
    ]

并且项目将具有belongs_to关系以进入菜单。我试过了

menus=[]
items.each do |mi|
  menus << mi.menu.name
end

但无法让这个工作。有任何想法吗?我想我需要收集但不确定。

thx任何帮助

1 个答案:

答案 0 :(得分:2)

您指定的结果是一个有效的数组,因为数组项目没有&#34;名称&#34;。这是一个有效的数组:

[{"items":["ocean","sky"]}, {"items":["fire","sunset"]}]

虽然这是哈希:

{"blue":
      {"items":["ocean","sky"]}],
 "red":
      {"items":["fire","sunset"]}]
}

要获取哈希,您可以执行以下操作:

menus={}
items.each do |mi|
  (menus[mi.menu.name] ||= []) << mi.name
end

要仅获取上面的数组,您只需添加上面的代码:

menus.values