如何只渲染相同日期的音符?

时间:2016-05-03 20:42:12

标签: ruby-on-rails ruby

除了每天显示所有笔记外,我们如何才能每天只显示一个笔记,note.note_date == date

Day 1: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 1 note
Day 2: Notes/form
Day 3: Notes/notes # Shows both Day 1 and Day 3 note. Only want to show Day 3 note
Day 4: Notes/form
Day 5: 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 %>

备注/注意事项

<% @notes.each do |note| %>
  <%= note.notes_text %>
<% end %>

备注/形式

<%= form_for [@notable, @note] do |f| %>
  <%= f.text_area :notes_text, placeholder: 'Enter Recap' %>
  <%= f.date_select :notes_date, selected: date, :order => [:month, :day, :year] %>
<% end %>

challenges_controller

def show
  @notable = @challenge
  @notes = @notable.notes
  @note = Note.new
end

回顾一下,用户创建了一个挑战。挑战具有属性days_challenged。用户选择将被挑战的天数,即10,15,30等。对于每一天,将呈现notes/form。如果note.notes_date等于相应的一天,那么我们怎样才能显示一个音符代替notes/form

2 个答案:

答案 0 :(得分:2)

<% if @notes.any? 
  @today_notes = @notes.select{ |note| note.notes_date.strftime("%m/%d/%y") == date.strftime("%m/%d/%y") } %>
  <%= render 'notes/notes' %>
<% else %>
...
<% end %>

然后在notes / notes partial中使用@today_notes

答案 1 :(得分:0)

将此<%= render 'notes/notes' %>部分更改为低于1,然后在note.html.erb文件下方。

挑战显示:

    <%= render partial: 'notes/notes', locals:{note: note} %>

将note.html.erb重命名为下划线_notes.html.erb

备注/ _notes.html.erb:

  <%= note.notes_text %>