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

3
我有一个表单,允许用户组合哈希值。
期望的哈希格式应该像这样:
{1 => "a", 2 => "x", 3 => "m"}
我可以通过在输入名称中使用内部括号来构建类似的内容:
<%= hidden_field_tag "article[1]", :value => a %>

然而,最终结果是创建了一个哈希表,其中所有的键都是字符串而不是整数:
{"1" => "a", "2" => "x", "3" => "m"}
我目前通过在控制器中循环遍历输入哈希表来生成一个新的哈希表,并将其赋值给params以修复此问题。是否有更简洁、更DRY的方法来解决这个问题?
2个回答

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
这取决于您想要将其用于什么。也许只需使用字符串作为键,并在访问数组时进行“转换”(或根本不进行转换)会更容易一些?
还可以使用类似以下的内容构建数组:
<%= hidden_field_tag "article[]", :value => "x" %>

这将返回一个数组 "article",您可以通过索引直接访问它。但是,没有办法影响位置 - 数组将按出现顺序包含所有值。

最后,您可以制作自己的哈希版本或修改键,如已经解释的那样。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接