如何在 fields_for 内动态增加计数器?

How to dynamically increment a counter inside fields_for?

我正在构建一个表单,人们可以在其中添加日常挑战。此表格应垂直列出一周中每一天的项目。这些天应按周 # 分组。

以这种方式:

第 1 周

第 2 周

我使用一个按钮来动态添加项目,当这些项目也被添加时,应该会发生递增。在一周内完成 7 次每日挑战后,应在 UI.

上创建新的一周部分

我已经使用 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>

我希望每次单击 'Add Challenge' 按钮时 'i' 计数器都会递增 1,但它只会在我最初加载页面时设置为“2”。

你应该看看:Rails: fields_for with index?

对于你的情况,尝试:

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

Mark 指出的解决方案确实可以很好地在第一次加载时获取项目的索引。对于任何想让它动态工作的人,我不得不使用 Javascript。您可以在此处找到有关它的更多信息:Javascript events 这样您就可以在 DOM 加载后对其进行操作(例如,用于添加新元素)。