Я пытаюсь создать форму для модели Mongoid, которая имеет поле массива. Я хочу, чтобы моя форма имела текстовое поле для каждой записи в массиве. Если я создаю новую запись, по умолчанию будет пустое поле (и некоторый javascript для динамического добавления новых полей на странице).
Я искал решение для решения с помощью полей_по_о_о_, но похоже, что он больше предназначен для обработки случая, когда у вас есть массив объектов/моделей, а не тот, который у меня есть, который представляет собой массив строк.
Я собираюсь использовать пример человека и номер телефона.
class Person
include Mongoid::Document
field :name, :type => String
field :phone_numbers, :type => Array
end
Для контроллера просто предположим, что обычный контроллер, но в методе new
, я инициализировал массив phone_number одной пустой строкой.
Здесь код формы:
<%= form_for(@person) do |f| %>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :phone_numbers %><br />
<% @person.phone_numbers.each do |phone_number| %>
<%= text_field_tag "person[phone_numbers][]", phone_number %>
<% end %>
</div>
<% end %>
Все это прекрасно работает. Есть несколько вещей, которые мне не нравятся.
- Жестко закодированное имя поля в вызове text_field_tag.
- Использование text_field_tag вместо f.text_field
- Имея ощущение, что я должен как-то использовать fields_for вместо этого
Есть ли у кого-нибудь лучшие предложения о том, как это реализовать? Или вы считаете это правильным?