2010-06-25 46 views
3

我有一个表单,允许用户将散列拼在一起。Ruby on Rails:将表单输入解释为一个整数

的哈希值所需的最终的形式将是这样的:
{1 => “一”,2 => “×”,3 => “M”}

我可以建立类似的东西具有大量的输入,具有内部支架在其名称:

<%= hidden_field_tag "article[1]", :value => a %> 

然而,最终的结果是建立一个散列结果,其中所有的键是字符串,而不是整数:
{“1” =>“一” ,“2”=>“x”,“3”=>“m”}

我目前正在通过循环输入散列,然后将其分配给参数,在控制器中生成一个新的散列来解决这个问题。有没有更干净,干燥的方式来做到这一点?

回答

2

你的参数将总是带有字符串键和值。解决这个问题的最简单的方法是要么编写自己的扩展散列或根据需要简单地注入:

numeric_keys = params['article'].inject({ }) do |h, (k, v)| 
    h[k.to_i] = v 
    h 
end 

然后,你必须用钥匙哈希转换为整数值,只要你喜欢。

一个简单的扩展可能是:

class Hash 
    def remap_keys 
    inject({ }) do |h, (k, v)| 
     h[yield(k)] = v 
     h 
    end 
    end 
end 

这是更为通用的,可以沿该线路上使用:

params['article'].remap_keys(&:to_i) 
1

这取决于一点要作什么用途。也许仅仅使用字符串作为键比较容易,并且在访问数组时(或根本不使用)执行“转换”?

也可以建造使用的东西数组一样

<%= hidden_field_tag "article[]", :value => "x" %> 

这将返回“文章”作为一个数组,你可以直接索引来访问它。但是,无法影响位置 - 该数组将按照外观顺序包含所有值。如上所述,最后,您可以制作自己的哈希版本,或者只是修改密钥。