Я изо всех сил пытался создать форму для модели 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 %>
Это все отлично работает.Есть несколько вещей, которые мне не нравятся.
- Жестко заданное имя поля в вызове text_field_tag.
- Использование text_field_tag вместо f.text_field
- Имея ощущение, будто я должен каким-то образом использовать fields_forиз этого
Кто-нибудь есть какие-либо лучшие предложения о том, как это реализовать?Или вы считаете это правильным?