Поддержание вложенных уровней при сериализации поля, созданного с использованием fields_for - PullRequest
0 голосов
/ 14 декабря 2011

Благодаря помощи людей ранее я узнал, как сериализовать вложенный хэш в один столбец. Хотя мне удалось сгенерировать поля формы на нескольких уровнях и вернуть значения полей обратно в строку, я не могу сохранить различные уровни для хэша.

Мой хэш выглядит следующим образом:

Мой код выглядит так:

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

То, что я на самом деле хочу, это продукт [категории] [0] [активный] и продукт [категории] [1] [активный].

Есть предложения о том, как подойти к этому?

1 Ответ

0 голосов
/ 17 декабря 2011

На тот случай, если кто-то споткнется по этому вопросу, столкнувшись с подобной проблемой, я хотел бы поделиться окончательным решением.

Вы должны использовать text_field_tag, select_tag и т. Д. Вместо fields_for помощника. Используйте цикл (.each_with_index do | key, index |) для перебора вашего хэша. Затем сгенерируйте полное имя для каждого поля в формате «product_categories_0_active».

Я постараюсь написать учебник или блог по этому поводу, как только выйду из своего проекта, но думаю, что большинство людей поймут это отсюда.

Надеюсь, это поможет.

...