3

我正在使用 JavaScript 将用户输入转换为看起来像哈希数组的字符串,并将其传递给 Rails 表单中的隐藏字段。即这样的东西被传递给我的控制器:

<input id="UserHash" name="UserHash" type="hidden" value="[{ :payer_id => 1, :amt => 90.00}, { :payer_id => 2, :amt => 80.00}, { :payer_id => 4, :amt => 20.00}]">

eval(params[:UserHash])用来把它变成我可以使用的哈希。我是否通过使用完全损害了安全性eval(),如果是这样,有没有办法可以检查传递的字符串是否是一个哈希数组?任何关于我正在做的事情的意见将不胜感激。我使用 JS 传递哈希数组的原因是因为我的表单收集有关可变长度集合(一组可变付款人)的数据。

4

1 回答 1

5

最好的办法是改用 JSON。

这正是 JSON 设计的场景。在 Javascript 中创建一个 JSON 字符串并在 Ruby 中使用

require 'json'

string = '[{"payer_id":1,"amt":90.0},{"payer_id":2,"amt":80.0},{"payer_id":4,"amt":20.0}]'
data = JSON.parse(string)

它会将您的字符串转换为哈希数组。

 

请注意,如果您希望键是符号,请使用

data = JSON.parse(string,:symbolize_names=>true)
于 2013-01-04T21:43:22.773 回答