2017-01-25 7 views
0

Я посылаю массив ("[1,3,44,2,0]") с помощью Ajax PATCH вызова, и он поступает как:Преобразовать Params массив чисел (строка) в фактический целочисленный массив

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

Попробуйте

JSON.parse(params[:ids]) 

Но я думаю, что вы должны проверить ваш вызов Ajax. Должно быть возможно передать массив не как строку.

+0

Спасибо! Виноват! Я просто проверил вызов Ajax, и хотя я хотел передать массив как целочисленный массив, я на самом деле вызывал на нем 'JSON.stringify'. Я полностью забыл об этом, и я сделал это, потому что я читал кого-то, рекомендующего этот подход. Это была плохая рекомендация («стягивать»)? Нет ничего плохого в том, что нужно просто передать массив целых чисел? – user664833

+0

Ничего страшного;) – Ursus