在序列化使用fields_for生成的字段时维护嵌套级别

时间:2011-12-13 23:31:45

标签: ruby-on-rails serialization hash form-for fields-for

感谢前人提供的帮助,我对如何将嵌套哈希序列化为单个列感到兴奋。虽然我能够在多个级别生成表单字段并将字段的值返回到字符串,但我无法保留散列的不同级别。

我的哈希看起来如下:

我的代码如下:

 <% 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 %>

我的示例中的最后一个哈希字符串获取两个类别的数据,并且在分配给它时必须类似于以下字符串:categories应如下所示:

{"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" /> 

我真正想要的是产品[类别] [0] [有效]和产品[类别] [1] [有效]。

有关如何处理此事的任何建议?

1 个答案:

答案 0 :(得分:0)

万一有人在这个问题上遇到类似的问题,我想分享最终解决方案。

您必须使用text_field_tag,select_tag等而不是fields_for帮助程序。使用循环(.each_with_index do | key,index |)迭代哈希。然后基本上以格式&#34; product_categories_0_active&#34;为每个字段生成一个完全限定的名称。

一旦我在项目中走出困境,我会尝试写一个教程或博客,但我想大多数人都会从这里想出来。

希望它有所帮助。