Я изо всех сил пытался создать форму для модели Mongoid, которая имеет поле массива. Я хочу, чтобы в моей форме было текстовое поле для каждой записи в массиве. Если я создаю новую запись, по умолчанию будет одно пустое поле (и некоторый javascript для динамического добавления новых полей на страницу).
Я искал решение, используя fields_for, но похоже, что это более предназначено для обработки случая, когда у вас есть массив объектов / моделей, а не случай, который у меня есть, а именно массив строк.
Я буду использовать пример человека и номера телефона.
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 %>
Все работает нормально. Есть несколько вещей, которые мне не нравятся.
Есть ли у кого-нибудь лучшие предложения по как это реализовать? Или вы считаете это правильным?