通过隐藏字段将数组传递给rails

时间:2011-08-24 12:46:42

标签: ruby-on-rails hidden form-fields

我的表格中有一个像这样的hidden_​​tag

 <%= 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值设置为逗号分隔的字符串,希望rails在提交表单时能够识别。但这是我在服务器端获得的价值

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

代替

      "loc"=>[80.22167450000006,13.0454044] 

如何在隐藏字段中设置正确的值,因此rails可以正确理解它。

3 个答案:

答案 0 :(得分:3)

您需要使用多个隐藏字段,一个用于值数组的每个元素。

例如:

<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 :(得分:1)

我发现text_area可以让事情发挥作用,而无需添加一堆隐藏的表单。只需将文本区域的值设置为类似[1,31,51,61]的值,它应该可以正常工作,假设您的模型中有serialize :var

答案 2 :(得分:1)

我最近遇到了同样的问题。我的解决方案是通过简单地用逗号分割数组来在服务器端处理它。就我而言,它看起来像这样:

  # 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