通过隐藏字段将数组传递到Rails

7
我在表单中有一个类似于以下的隐藏标签。
 <%= 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能够正确理解它。

2
隐藏字段设置样式有什么用处?;-) - Mischa
@mischa,不知道,我是使用hidden_field标签生成的代码... :) - RameshVel
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);

我曾经考虑过这个。但是我正在从客户端填充隐藏值,这样更难。因为我需要处理很多值。 - RameshVel
是的,您需要动态添加一个新元素。 - Winfield
如果现在我需要为每个输入都有一个不同的ID怎么办?因为以与jQuery添加它们的方式相同,现在我想通过其ID删除其中任何一个。 - alexventuraio

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

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

你如何调用自定义的setter以执行它?为了进行拆分。 - alexventuraio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接