2012-05-19 29 views
0

我拉从我的Rails应用程序从外部API的参数平哈希。我需要在选择字段中将这些参数呈现给用户。如何从平面散列值创建分组选择?

[["Name", "ID", "Category"]] 

我想呈现这个作为一个分组选择:

散列格式如下。但我相信grouped_select标签采用层次散列,而不是平面散列?

是否有一种简单的方法将这个散列重构为结构化散列?即,

['CategoryA', [['Name-A1','ID-A1'],['Name-A2', 'ID-A2']] 

仅供参考,我目前正在处理哈希在我的控制器这样

@hash = session["hash"].map { |h| [ h["name"], h["id"], h["category"] ] } 

,并在视图

<%= f.select :hash_id, @hash %> 

这给我的选项的无序列表。我如何在h["category"]上分组?

感谢您的指点。

编辑

顺便说一句,我; VE已经尝试过group_by,因为它似乎是显而易见的路要走。但我得到can't convert String into Integer。也许我没有正确使用它?

hash.group_by {|h| h["category"] }.map { |h| [ h["name"], h["id"], h["category"] ] } 

回答

2
hash.group_by {|h| h["category"] }.map { |h| [ h[0], h[1].map{|e| [e["name"],e["id"]]} ] } 
+0

OK,这使得有很大的意义了。感谢您的帮助!您能否推荐任何有用的信息来帮助解决未来的类似问题。 –