Как динамически увеличить счетчик внутри fields_for? - PullRequest
0 голосов
/ 26 сентября 2019

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

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

Неделя 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» только при первоначальной загрузке страницы.

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Вы должны взглянуть на: 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 %>
0 голосов
/ 26 сентября 2019

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

...