如何将<% @notes.each do |note| %>
合并到@challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
中,以便挑战/展示中的条件有效?
因为现在每个音符都会多次呈现音符/表格。
挑战/显示
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
<% @notes.each do |note| %> # How to incorporate this iteration into above iteration?
Day <%= i + 1 %>
<% if note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") %> # If note is created on date then show note else show form
<%= note.notes_text %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
<% end %>
这是因为有两次迭代而不是两者的组合。我不知道如何将两者结合起来,以便迭代适用于在date
上创建注释然后显示<%= note.notes_text %>
其他显示注释/表单的情况。
答案 0 :(得分:2)
当尝试在Ruby中排列两个不同的数据结构时,您可以使用大量工具。其中一个更方便的是能够将一系列事物转换为字典,即哈希,您可以通过一些任意属性快速查找它们。
例如:
<%- notes_for_date = @notes.group_by(&:note_date) -%>
然后您可以在任何给定日期显示备注:
<%- if notes_for_date[date].any? %>
<%- notes_for_date[date].each do |note| -%>
<%= note.notes_text %>
<%- end -%>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
您似乎有点模糊的一点是像@notes
这样的集合是一个数组或类似数组的结构,直接调用note_text
方法是不可能的。
如果你想获得所有这些值,你可以这样做:
note_texts = @notes.collect(&:note_text).join
它具有拉出所有音符并将它们组合成单个字符串的效果。
在学习它时首先尝试掌握Ruby的东西是理解如何将您拥有的数据转换为您需要的形式,或者更接近您最终需要的形式,并逐步解决它。 Enumerable库充满了非常方便的工具,我建议您在任何空闲时间查看它,您必须了解可用工具的广度和深度。