Вложенные формы в Rails - PullRequest
       1

Вложенные формы в Rails

2 голосов
/ 22 февраля 2012

Гуглил, но я не могу найти никакой помощи по этому поводу. Я пытаюсь динамически добавлять поля во вложенную форму, которую я создаю. Текущий код:

Контроллер

if @jobstream.complex_attributes == []      
        @functional_group.functional_type_stores.each do |ftype|
                if(Type.find(ftype.type_id).simple_or_complex == 'C' || Type.find(ftype.type_id).simple_or_complex == 'c' )
                    @jobstream.complex_attributes.build(:type_id => Type.find(ftype.type_id).id)
                end
        end
end

Форма

<%= f.fields_for :complex_attributes do |f_sa| %>
    <tr>
        <div class="field">
            <td><%= @complexType[@counter].display_name %></td>
            <td><%= @complexType[@counter].simple_or_complex %></td>
            <%= f_sa.hidden_field :type_id%>
            <td><%= f_sa.text_field :content, :size => 100 %></td>
        </div>
    </tr>
    <% (@counter += 1) %>
<% end %>

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

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

Ответы [ 2 ]

1 голос
/ 22 февраля 2012
0 голосов
/ 22 февраля 2012

Поскольку вы не можете добавить больше пар атрибутов к существующей модели (больше, чем поля в БД), вам, возможно, придется создать другую модель, которая принадлежит модели @jobstream. Эта новая модель будет хранить атрибуты и должна вызываться с помощью модели @jobstream.

В форме вам нужно будет добавлять поля удаленно, и чтобы избежать ошибок, вам нужно будет использовать Model.create вместо Model.new (так как в противном случае вложенная форма будет аварийно завершена). Также вам понадобится новый тег fields_for для каждого добавленного поля.

Полагаю, это было бы для Rails.

Вы также можете попытаться сохранить эти новые атрибуты в виде хэша в указанном поле - например, вы можете иметь такие поля, как

<%= fields_for :complex_attributes, do |f| %>
<%= f.text_field :attr_foo %>
<%= f.text_field :attr_new %>
<%= f.text_field :another_attr_new %>...

И после обновления формы вы можете получить эти атрибуты, используя Model.complex_attributes.each_pair do |key, value| Проблема в том, что при добавлении дополнительных полей вам может потребоваться жестко их кодировать, а также необходимо назначить новый ключ для каждого нового поля.

Хотя это можно сделать. Я думаю:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...