Ruby on rails RubyonRails:将表单输入解释为整数

Ruby on rails RubyonRails:将表单输入解释为整数,ruby-on-rails,string,forms,integer,Ruby On Rails,String,Forms,Integer,我有一个表单,允许用户将一个散列放在一起 哈希所需的结束格式如下: {1=>“a”,2=>“x”,3=>“m”} 我可以通过在名称中有内部括号的大量输入来构建类似的内容: <%= hidden_field_tag "article[1]", :value => a %> a%> 但是,最终的结果是生成一个哈希,其中所有键都是字符串而不是整数: {“1”=>“a”,“2”=>“x”,“3”=>“m”} 我目前正在修复这个问题,通过在输入哈希上循环,在控制器中生成一个新的哈希,

我有一个表单,允许用户将一个散列放在一起

哈希所需的结束格式如下:
{1=>“a”,2=>“x”,3=>“m”}

我可以通过在名称中有内部括号的大量输入来构建类似的内容:

<%= hidden_field_tag "article[1]", :value => a %>
a%>
但是,最终的结果是生成一个哈希,其中所有键都是字符串而不是整数:
{“1”=>“a”,“2”=>“x”,“3”=>“m”}


我目前正在修复这个问题,通过在输入哈希上循环,在控制器中生成一个新的哈希,然后将其分配给参数。有没有更干净、更干爽的方法呢?

您的参数总是带有字符串键和值。解决此问题的最简单方法是将自己的扩展写入哈希,或者根据需要简单地插入:

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)

这取决于你想用它做什么。也许使用字符串作为键更容易,在访问数组时进行“转换”(或者根本不进行转换)

也可以使用以下内容构建阵列

<%= hidden_field_tag "article[]", :value => "x" %>
“x”%%>
这将以数组的形式返回“article”,您可以通过索引直接访问它。但是,无法影响位置-数组将按外观顺序包含所有值

最后,如前所述,您可以制作自己版本的散列或修改密钥