我很难搞清楚如何做到这一点。我有一组从where查询返回的项目。每个项目都属于一个菜单。我想创建一个名为菜单的数组,其中包含项目菜单的名称,然后创建项目的子数组,但我无法弄清楚这一点。
我想(假设“蓝色”和“红色”是菜单的名称):
menus:["blue":
{"items":["ocean","sky"]}],
"red"
{"items":["fire","sunset"]}]
]
并且项目将具有belongs_to关系以进入菜单。我试过了
menus=[]
items.each do |mi|
menus << mi.menu.name
end
但无法让这个工作。有任何想法吗?我想我需要收集但不确定。
thx任何帮助
答案 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