如何将两个数组合并为一个,例如......
Shoulda::Matchers.configure do |config|
config.integrate do |with|
with.test_framework :rspec
with.library :rails
end
end
如果用户在第3天创建了一个注释,它将看起来像......
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/form
Day 4: Notes/form
Day 5: Notes/form
下面的代码怪物试图实现上述目标,但迭代完全没有了。例如,如果在第1天和第3天创建了注释,那么输出将看起来像......
Day 1: Notes/form
Day 2: Notes/form
Day 3: Notes/notes
Day 4: Notes/form
Day 5: Notes/form
挑战/显示
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
回顾一下,用户创建了一个挑战。挑战具有属性<% @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 %>
。用户选择将被挑战的天数,即10,15,30等。对于那些日子中的每一天,我想要显示注释/表格。如果用户随后在一天输入了一个注释,那么应该在显示页面上用该注释替换注释/表单(没有一天应该有多个与之关联的注释)。
答案 0 :(得分:1)
你在循环中做了太多的事情,你正在用它来找到当天的音符。这应该是正确的:
<% @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 %>
这在视图中仍然是太多逻辑。
@notes
是Hash
,其密钥为Date
并且其值为Notes
,则会更容易。然后,您可以使用哈希查找替换any?
。strftime("%m/%d/%y")
。你应该只能比较Date
。 (如果你不能这样做,因为他们处于不同的时区或某事,考虑修复它 - 它会在你的应用程序中引起混淆。)dates_challenged.first(@challenge.days_challenged)
提取到名为Challenge
的{{1}}上的方法中,并在视图中使用该方法。