Проблема с Rails - PullRequest
       59

Проблема с Rails

0 голосов
/ 02 мая 2011

У меня есть эта проблема:

В моем веб-приложении есть форма, в которой пользователи могут настроить свой профиль.В каждом профиле может быть указано много навыков, и я хочу позволить пользователям нажимать одну кнопку (добавить новый навык), чтобы указать столько навыков, сколько они хотят.Итак, это код контроллера:

  accepts_nested_attributes_for :skills, :allow_destroy=>true, :reject_if => lambda {|a| a[:name].blank?}

Это форма (только часть со вложенным атрибутом навыка):

<%= f.fields_for :skills do |builder|%>

    <div class="field">

        <%= builder.label :skill %>
        <%= builder.text_field :name%>
                <%= builder.hidden_field :_destroy %>

                <%= link_to 'remove', '#', :onclick=>'removeField()'%>
    </div>
                  <%end%>

Эта форма отлично работает и показывает каждое умениепользователь, он позволяет редактировать и т. д. Теперь проблема в том, что я хочу добавить ссылку для «добавления нового навыка», чтобы функция javascript меняла форму и добавляла поле ввода нового навыка , у меня действительно нетидея о том, как действовать, главным образом потому, что вложенные атрибуты имеют определенный идентификатор и имя в форме, которую я не понимаю:

<input id="profile_skills_attributes_0_name" name="profile[skills_attributes][0][name]" size="30" type="text" value="Mathematicansszz" /> 

Также добавлено еще одно скрытое поле ввода с идентификатором навыка (невозможно)предсказать, если навык не создан), сделать невозможным создание нового навыка из статических страниц HTML?

 <input id="profile_skills_attributes_0_id" name="profile[skills_attributes][0][id]" type="hidden" value="3" /> 

Любая идея или обходной путь?Спасибо

Ответы [ 2 ]

1 голос
/ 02 мая 2011

Я написал гем, который может обрабатывать, что упрощает динамическую обработку вложенных форм: кокон . Драгоценный камень работает со стандартными помощниками рельсов, но также и с formtastic или simple_form.

Я бы также посоветовал вам оформить заказ formtastic или simple_form, так как это замечательные гемы, облегчающие обработку форм. Но, как и в случае с HAML, это личный выбор.

0 голосов
/ 02 мая 2011

fields_for создает массив полей. «0» в имени представляет индекс в массиве. Поскольку вы создаете новые записи, вы можете просто игнорировать скрытое поле идентификатора.

Итак, с помощью javascript вам просто нужно сделать две вещи: 1. Подсчитайте количество существующих входных данных для дочерней коллекции, чтобы получить новый индекс. 2. Добавьте новое текстовое поле, используя новый индекс.

Это относительно легко сделать с помощью jQuery, используя селектор с подстановочными знаками, например $ ('input [name $ = "] [name]"]'). Length; чтобы получить счет (для нового индекса). Если у вас есть другое поле для массива с полями имен, вы можете вместо этого использовать селектор регулярных выражений (через плагин). Более простым способом может быть просто добавить класс к каждому из введенных вами названий навыков и использовать этот класс в качестве селектора при подсчете.

Для добавления нового ввода см .:

http://api.jquery.com/append/

Если вы не используете jquery, то он должен быть похож на другие фреймворки с небольшим гуглом.

...