如何通过公共属性将两个数组合并为一个?
How can I combine two arrays into one by a common attribute?
如何将两个数组合并为一个,例如...
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/form
Day 4: Notes/form
Day 5: Notes/form
如果用户随后在第 3 天创建了一条笔记,它看起来像...
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/notes
Day 4: Notes/form
Day 5: Notes/form
下面的代码怪兽试图实现上述目标,但迭代全部关闭。例如,如果在第 1 天和第 3 天创建了一条注释,那么输出将类似于...
Day 1: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 1 note
Day 1: Notes/form
Day 2: Notes/form
Day 2: Notes/form
Day 3: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 3 note
Day 3: Notes/form
Day 4: Notes/form
Day 4: Notes/form
Day 5: Notes/form
Day 5: Notes/form
challenges/show
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
<% @notes.each do |note| %>
Day <%= i + 1 %>
<% if note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") %>
<%= render 'notes/notes' %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
<% end %>
总而言之,用户创建了一个挑战。挑战具有属性 days_challenged
。用户选择挑战的天数,即 10、15、30 等。对于这些天中的每一天,我都想显示一个 notes/form。如果用户随后在某一天输入了一条注释,则显示页面上的 notes/form 应替换为该注释(任何一天都不应有多个与之关联的注释)。
您在用于查找当天笔记的循环中做的太多了。这应该是正确的:
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
Day <%= i + 1 %>
<% if @notes.any? { |note| note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") } %>
<%= render 'notes/notes' %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
这个观点还是太有逻辑了
- 正如 photoionized 评论的那样,如果
@notes
是一个 Hash
,其键是 Date
,其值是 Notes
,那会更容易。然后,您可以用散列查找替换 any?
。
- 我不清楚你为什么需要比较
strftime("%m/%d/%y")
。您应该能够比较 Date
s。 (如果你不能这样做是因为他们处于不同的时区或其他原因,请考虑解决这个问题——它会在你的整个应用程序中造成混乱。)
- 我将
dates_challenged.first(@challenge.days_challenged)
提取到 Challenge
上名为 current_dates_challenged
的方法中,并在视图中使用它。
如何将两个数组合并为一个,例如...
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/form
Day 4: Notes/form
Day 5: Notes/form
如果用户随后在第 3 天创建了一条笔记,它看起来像...
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/notes
Day 4: Notes/form
Day 5: Notes/form
下面的代码怪兽试图实现上述目标,但迭代全部关闭。例如,如果在第 1 天和第 3 天创建了一条注释,那么输出将类似于...
Day 1: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 1 note
Day 1: Notes/form
Day 2: Notes/form
Day 2: Notes/form
Day 3: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 3 note
Day 3: Notes/form
Day 4: Notes/form
Day 4: Notes/form
Day 5: Notes/form
Day 5: Notes/form
challenges/show
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
<% @notes.each do |note| %>
Day <%= i + 1 %>
<% if note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") %>
<%= render 'notes/notes' %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
<% end %>
总而言之,用户创建了一个挑战。挑战具有属性 days_challenged
。用户选择挑战的天数,即 10、15、30 等。对于这些天中的每一天,我都想显示一个 notes/form。如果用户随后在某一天输入了一条注释,则显示页面上的 notes/form 应替换为该注释(任何一天都不应有多个与之关联的注释)。
您在用于查找当天笔记的循环中做的太多了。这应该是正确的:
<% @challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>
Day <%= i + 1 %>
<% if @notes.any? { |note| note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") } %>
<%= render 'notes/notes' %>
<% else %>
<%= render 'notes/form', :date => date %>
<% end %>
<% end %>
这个观点还是太有逻辑了
- 正如 photoionized 评论的那样,如果
@notes
是一个Hash
,其键是Date
,其值是Notes
,那会更容易。然后,您可以用散列查找替换any?
。 - 我不清楚你为什么需要比较
strftime("%m/%d/%y")
。您应该能够比较Date
s。 (如果你不能这样做是因为他们处于不同的时区或其他原因,请考虑解决这个问题——它会在你的整个应用程序中造成混乱。) - 我将
dates_challenged.first(@challenge.days_challenged)
提取到Challenge
上名为current_dates_challenged
的方法中,并在视图中使用它。