如何从值的平面哈希创建分组选择?

时间:2012-05-19 09:21:32

标签: ruby-on-rails

我从外部API将参数的平面哈希拉到我的Rails应用程序中。我需要在选择字段中向用户显示这些参数。

哈希的格式如下:

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

我想将此作为分组选择。但我相信groups_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"]

感谢您的任何指示。

修改

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

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

1 个答案:

答案 0 :(得分:2)

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