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