Как динамически увеличивать счетчик внутри fields_for?

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

Таким образом:

1 неделя

  • Вызов №1
  • Вызов №2
  • Вызов №3

Неделя 2

  • Вызов №4
  • Вызов № 5
  • Вызов №6

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

Я использовал fields_for и пытался использовать простой счетчик, увеличивая его на каждой итерации.

<% i = 1 %>

<div id="challenges_container">
<%= f.fields_for :challenges do |mi| %>
<% i += 1 %>
<%= i %>

<% end %>
</div>

<p><%= f.link_to_add '<i class="fi-plus"></i> Add Challenge'.html_safe, :challenges, :data => {:target => '#challenges_container'} %></p>

Я ожидал, что счетчик «i» будет увеличиваться на единицу каждый раз, когда я нажимаю кнопку «Добавить вызов», но он устанавливается на «2» только при начальной загрузке страницы.


person Denis Lessard    schedule 26.09.2019    source источник


Ответы (2)


Вы должны взглянуть на: Rails: fields_for с индексом?

В вашем случае попробуйте:

<% @challenges.each_with_index do |challenge, index| %>
  <%= f.fields_for :challenges, challenge do |fc| %>
  ## Do whatever you want with challenge and index
  <% end %>
<% end %>
person Mark    schedule 26.09.2019

Решение, на которое указал Марк, отлично работает для получения индексов элементов при первой загрузке. Для тех, кто хочет заставить его работать динамически, мне пришлось использовать Javascript. Дополнительную информацию об этом можно найти здесь: События JavaScript Таким образом, вы можете манипулировать DOM. даже после его загрузки (например, для добавления новых элементов).

person Denis Lessard    schedule 26.09.2019