多亏了前面人们的帮助,我掌握了如何将嵌套散列序列化到单个列中的窍门。虽然我能够在多个级别生成表单字段并将字段的值返回到字符串中,但我无法保留哈希的不同级别。
我的哈希值如下所示:
我的代码如下:
<% categoryvalue.each do |categoryproperty, categorypropertyvalue| %>
<div>
<%= f.fields_for :categories, categoryproperty do |categoryattribs| %>
<%= categoryattribs.label categoryproperty %> <br/>
<%= categoryattribs.text_field categoryproperty, :value => categorypropertyvalue %> <br/>
<% end %>
</div>
<% end %>
我的示例中的最后一个哈希字符串获取两个类别的数据,并且当它被分配给时必须与以下字符串相似:
{"0" => {"Active"=>"yes", "totalproducts"=>"100", "segment"=>"Premium"}, "1" => "Active"=>"yes", "totalproducts"=>"190"}}
但是,字符串以以下形式出现:
{"Active"=>"yes", "totalproducts"=>"100", "segment"=>"Premium", "Active"=>"yes", "totalproducts"=>"190"}
是否有一种方法来区分一个类别与另一个类别的属性,并在主哈希中有两个单独的哈希?现在所有的东西都被摊平了。这在如何生成输入字段的id和名称中很明显。请看下面的示例:
<input id="product_categories_Active" name="product[categories][Active]" size="30" type="text" value="%" />
<input id="product_categories_Active" name="product[categories][Active]" size="30" type="text" value="lbs" />
我真正想要的是产品[categories][0][Active]和产品[categories][1][Active]。
有什么建议吗?
为了防止有人遇到类似的问题,我想分享一下最终的解决方案。
你必须使用text_field_tag, select_tag等代替fields_for助手。使用循环(。Each_with_index do |key, index|)来遍历你的散列。然后基本上以" product_categores_0_active "的格式为每个字段生成一个完全限定的名称。
一旦我完成了我的项目,我会尝试写一篇教程或博客,但我认为大多数人会从这里弄清楚。
希望能有所帮助。