我正在使用JavaScript将用户输入转换为一个看起来像哈希数组的String,并将其传递给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传递哈希数组的原因是因为我的表单收集了有关可变长度集合(一组付款人的变量)的数据。
答案 0 :(得分: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)