7

我的表单中有一个这样的 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 可以正确理解它。

4

3 回答 3

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);
于 2011-08-24T13:45:07.113 回答
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
于 2014-10-02T04:12:17.317 回答
1

我发现 text_area 可以让事情顺利进行,而无需添加一堆隐藏的表单。只需将文本区域的值设置为看起来像[1,31,51,61]它应该可以工作的东西,假设在你的模型中你有serialize :var

于 2012-08-07T17:49:29.603 回答