将params数字数组(一个字符串)转换为实际的整数数组

时间:2017-01-25 21:23:13

标签: ruby-on-rails arrays ruby parameters int

我通过Ajax "[1,3,44,2,0]"调用发送一个数组(PATCH),它以:

的形式到达
Parameters: {"ids"=>"[1,3,44,2,0]"}

要进行污点检查,我使用以下行 - 其中匹配锚定字符串的开头和结尾,并确保至少有一个数字,或者数字以逗号分隔:

raise "unexpected ids #{params[:ids]}" unless params[:ids].match(/\A\[(\d+,)*\d+\]\z/)

要从中创建一个实际的整数数组,我使用以下方法(删除括号,在逗号上拆分,将每个字符串元素转换为整数):

irb> "[1,3,44,2,0]"[1...-1].split(',').map {|e| e.to_i}
 => [1, 3, 44, 2, 0]

是否有更好(更简单,更便宜,更快)的方法?

1 个答案:

答案 0 :(得分:1)

尝试

JSON.parse(params[:ids])

但我认为你应该检查你的Ajax电话。必须可以不将数组作为字符串传递。