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

Posted

技术标签:

【中文标题】通过隐藏字段将数组传递给rails【英文标题】:Passing array via hidden fields to rails 【发布时间】:2011-11-02 18:58:09 【问题描述】:

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

【问题讨论】:

设置隐藏字段样式有什么用? ;-) @mischa,不知道,我使用 hidden_​​field 标签生成了代码.. :) 【参考方案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

【讨论】:

如何调用要执行的自定义设置器?为了进行拆分。【参考方案2】:

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

【讨论】:

【参考方案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);

【讨论】:

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

以上是关于通过隐藏字段将数组传递给rails的主要内容,如果未能解决你的问题,请参考以下文章

如何将 SAFEARRAY(字节数组)放入 HTML 隐藏字段

如何在另一个控制器的上下文中使用rails form partial而不将ID作为隐藏字段传递

如何根据两个是/否单选选项将值传递给隐藏字段

jQuery 更新隐藏的输入值,但不传递给 POST 变量

如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?

如何将jquery克隆行附加到隐藏字段