Как сгенерировать несколько текстовых полей для вложенных атрибутов в Rails

#ruby-on-rails #ruby #forms #ruby-on-rails-6

#ruby-on-rails #ruby #формы #ruby-on-rails-6

Вопрос:

У меня следующая проблема:

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

 [
  {foo: 0},
  {foo: 1},
  {foo: 10},
  {foo: 11},
  {foo: 100}
]
 

В моей форме я написал следующий код:

 <%= f.fields_for(:foo_associates, @bar.foo_associates) do |ff| %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
  <%= ff.text_field(:maincompany_id) %>
<% end %>
 

Таким образом, отображаемый HTML-код должен выглядеть следующим образом:

 <input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][1][foo]" />
<input name="company[foo_associates_attributes][2][foo]" />
<input name="company[foo_associates_attributes][3][foo]" />
<input name="company[foo_associates_attributes][4][foo]" />
 

Но это выглядит так:

 <input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
<input name="company[foo_associates_attributes][0][foo]" />
 

И мой результат выглядит так:

 [
  {foo: 0}
]
 

Что я делаю не так?
Все ответы приветствуются.

Ответ №1:

В вашем контроллере

 #new

5.times {@bar.foo_associates.build}
 

В форме

 <%= f.fields_for(:foo_associates) do |ff| %>
  <%= ff.text_field(:foo) %>
<% end %>
 

Комментарии:

1. Я бы также предложил использовать драгоценный камень-кокон. Это позволит динамически выстраивать отношения в форме. github.com/nathanvda/cocoon . Таким образом, вы могли бы начать с 1 или построенных ассоциаций, как говорит @dileepnandanam, но затем вы можете использовать gem для добавления 3,4,5 и т.д.

2. Но когда я делаю ЭТО таким образом, я могу связать только фиксированное количество foo_associates с @bar?

3. да, @Daniel, только что опубликовал ответ, чтобы исправить фундаментальную ошибку. вы должны использовать github.com/nathanvda/cocoon