Passing array via hidden fields to rails

匿名 (未验证) 提交于 2019-12-03 08:42:37

问题:

i have a hidden_tag like this in my form

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

which renders to

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

currently am setting the business_loc value as a comma seperated string hoping rails would recognize when submit the form. But this is the value i got on the server side

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

instead

      "loc"=>[80.22167450000006,13.0454044]  

how do i set the correct value in hidden field, so rails can understand it correctly.

回答1:

You need to use multiple hidden fields, one for each element of the array of values.

For example:

<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"> 

...if you need code to dynamically add these with JS, here's a jQuery example:

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); 


回答2:

I've found text_area's to make things work without having to add a bunch of hidden forms. Just set the value of the text area to something that looks like [1,31,51,61] and it should work, assuming in your model you have serialize :var



回答3:

I had this same problem recently. My solution was to handle it on the server side by simply splitting the array at the comma. In my case it looks like this:

  # 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 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!