通过隐藏字段将数组传递给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作为隐藏字段传递