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

时间:2010-06-25 17:36:21

标签: ruby-on-rails string forms integer

我有一个允许用户汇总哈希的表单。

哈希所需的结束格式将是这样的:
{1 => “a”,2 => “x”,3 =>的 “m”}

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

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

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

我目前正在通过循环输入哈希在控制器中生成新哈希,然后将其分配给params来解决此问题。是否有更清洁,干燥的方法来做到这一点?

2 个答案:

答案 0 :(得分:2)

你的参数总是带有字符串键和值。解决此问题的最简单方法是将自己的扩展名编写为Hash,或者只是根据需要进行注入:

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 :(得分:1)

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

也可以使用

之类的东西构建数组
<%= hidden_field_tag "article[]", :value => "x" %>

这会将“article”作为数组返回,您可以通过索引直接访问它。但是,没有办法影响位置 - 数组将按照外观的顺序包含所有值。

最后,您可以制作自己的Hash版本,或者只修改密钥,如上所述。