2011-12-13 6 views
0

以前の人の助けを借りて、ネストされたハッシュを単一の列にシリアライズする方法があります。私は複数のレベルでフォームフィールドを生成し、フィールドの値を文字列に戻すことができましたが、ハッシュのさまざまなレベルを保持することができません。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 %> 

私の例では、最終的なハッシュ文字列は、2つのカテゴリのデータを取り、次のように見える必要があります文字列が割り当てられると、カテゴリは次のようになります。

{"0" => {"Active"=>"yes", "totalproducts"=>"100", "segment"=>"Premium"}, "1" => "Active"=>"yes", "totalproducts"=>"190"}} 

ただし、文字列は次の形式で来ている:

{"Active"=>"yes", "totalproducts"=>"100", "segment"=>"Premium", "Active"=>"yes", "totalproducts"=>"190"} 

は別の一つのカテゴリの属性を区別し、メインハッシュ内の2つの別々のハッシュを持ってする方法はありますか?今はすべてが単一のレベルに平坦化されます。これは、入力フィールドの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] [アクティブ]です。

これにアプローチする方法についてのご意見はありますか?

答えて

0

同様の問題を抱えているこの質問に誰かがつまずく場合は、私は最終的な解決策を共有したいと考えていました。

fields_forヘルパーの代わりにtext_field_tag、select_tagなどを使用する必要があります。ループ(.each_with_index do | key、index |)を使用して、ハッシュを反復処理します。そして、基本的に各フィールドの完全修飾名を "product_categories_0_active"の形式で生成します。

私は自分のプロジェクトで森の外に出たら、このチュートリアルやブログを書こうとしますが、ほとんどの人がここからそれを理解すると思います。

希望します。

関連する問題