0

感谢之前人们的帮助,我掌握了如何将嵌套哈希序列化为单个列的方法。虽然我能够在多个级别生成表单字段并将字段的值返回到字符串中,但我无法为哈希保留不同的级别。

我的哈希如下所示:

我的代码如下所示:

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

我真正想要的是product[categories][0][Active] 和product[categories][1][Active]。

关于如何解决这个问题的任何建议?

4

1 回答 1

0

万一有人偶然发现这个问题有类似的问题,我想分享最终的解决方案。

您必须使用 text_field_tag、select_tag 等代替 fields_for 助手。使用循环 (.each_with_index do |key, index|) 来遍历您的散列。然后基本上以“product_categories_0_active”格式为每个字段生成一个完全限定名称。

一旦我的项目脱离困境,我会尝试写一个教程或博客,但我认为大多数人会从这里弄清楚。

希望能帮助到你。

于 2011-12-17T16:42:40.803 回答