Передача массива через скрытые поля в рельсы - PullRequest
7 голосов
/ 24 августа 2011

у меня есть скрытый тег, как это в моей форме

 <%= f.hidden_field :loc , {:multiple => true}  %>

, который отображается на

 <input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="">

в настоящее время я устанавливаю значение business_loc в виде строки с разделителями-запятыми, надеясь, что рельсы распознают ее при отправке формы. Но это значение, которое я получил на стороне сервера

      "loc"=>["80.22167450000006,13.0454044"] 

вместо

      "loc"=>[80.22167450000006,13.0454044] 

как мне установить правильное значение в скрытом поле, чтобы рельсы могли его правильно понять.

Ответы [ 3 ]

3 голосов
/ 24 августа 2011

Вам необходимо использовать несколько скрытых полей, по одному для каждого элемента массива значений.

Например:

<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="80.22167450000006">
<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="13.0454044">

... если вам нужен код для динамического добавления этихс JS, вот пример jQuery:

var field = $('<input id="business_loc" multiple="multiple" name="business[loc][]" type="hidden" style="color: rgb(175, 175, 175); " value="13.0454044">');
var form = $('#your-form-id');
form.append(field);
1 голос
/ 02 октября 2014

У меня недавно была такая же проблема.Мое решение состояло в том, чтобы обработать это на стороне сервера, просто разделив массив через запятую.В моем случае это выглядит так:

  # thing_that_has_many_objects.rb     <-- showing custom setter method from the model because my example involves using a virtual attribute
  # params[object_ids] = ["1,2,3,4,5"] <-- from the form - note the format of array with only one element

  def objects=(object_ids)       
    split_array = object_ids[0].split(',') 
    split_array.each do |id|
      self.objects.build(object_id: id)
    end
  end
1 голос
/ 07 августа 2012

Я нашел text_area, чтобы все работало без необходимости добавлять кучу скрытых форм. Просто установите значение текстовой области на что-то похожее на [1,31,51,61], и оно должно работать, если в вашей модели у вас есть serialize :var

...