我正在构建一个表单,有人可以通过表单添加日常挑战。此表单应垂直列出一周中每天的项目。这些日子应按周 # 分组。
以这种方式:
第 1 周
- 挑战 #1
- 挑战 #2
- 挑战 #3
第 2 周
- 挑战 #4
- 挑战 #5
- 挑战 #6
我使用按钮动态添加项目,并且添加这些项目时也应该发生递增。在一周内完成 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>
我希望每次单击"添加挑战"按钮时,"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事件 这样,即使在加载 DOM 之后,您也可以对其进行操作(例如,用于添加新元素(。