如何通过公共属性将两个数组合并为一个?

时间:2016-05-03 19:35:44

标签: ruby-on-rails ruby iteration each polymorphic-associations

如何将两个数组合并为一个,例如......

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等。对于那些日子中的每一天,我想要显示注释/表格。如果用户随后在一天输入了一个注释,那么应该在显示页面上用该注释替换注释/表单(没有一天应该有多个与之关联的注释)。

1 个答案:

答案 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 %>

这在视图中仍然是太多逻辑。

  1. 作为光电影评论,如果@notesHash,其密钥为Date并且其值为Notes,则会更容易。然后,您可以使用哈希查找替换any?
  2. 我不清楚为什么你需要比较strftime("%m/%d/%y")。你应该只能比较Date。 (如果你不能这样做,因为他们处于不同的时区或某事,考虑修复它 - 它会在你的应用程序中引起混淆。)
  3. 我将dates_challenged.first(@challenge.days_challenged)提取到名为Challenge的{​​{1}}上的方法中,并在视图中使用该方法。
相关问题