2016-04-28 60 views
0

如何將<% @notes.each do |note| %>合併到@challenge.dates_challenged.first(@challenge.days_challenged).each_with_index do |date, i| %>中以使challenge/show中的條件有效?如何結合兩個@objects的迭代?

因爲現在筆記/表單被按照每個筆記數多次呈現。

挑戰/節目

<% @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 %> else顯示註釋/表單。

+0

你的筆記模型與你的日期有什麼關係?目前還不清楚爲什麼要比較兩個格式化日期,因爲比較日期和日期應該足夠了。 – tadman

+0

我將'notes_date'與'date'進行了比較,因爲'notes_date'是'Note'的一個屬性,而'date'則是'Challenge' @tadman的'days_challenged'的屬性。我想爲用戶挑戰的每一天顯示一條筆記或備註/表單。如果該筆記是在那一天創建的,那麼該筆記應顯示該筆記/表格應顯示的內容。 –

回答

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時首先嚐試和掌握的東西是理解如何將您擁有的數據轉換爲您需要的表單或更接近您最終需要的表單的形式,並逐步解決它。圖書館裏有很多非常方便的工具,我鼓勵你在任何空閒時間仔細閱讀,你必須瞭解可用工具的廣度和深度。

+0

再次感謝Tadman!我一直在玩你的答案,但你從哪裏得到'[日期]'?我想離開'<%@ challenge.dates_challenged.first(@ challenge.days_challenged).each_with_index do | date,i | %>'因爲那麼導致'未定義的方法'任何?' for nil:NilClass' –

+0

您可以'notes_for_date.each | date,notes |'遍歷日期。 – tadman

+0

'<%@ notes_for_date.each do | date,notes | %> <%if @notes_for_date [date] .any? %> <%@notes_for_date [date] .each do | note | %> <%=備註。notes_text%> <% end %> <% else %> <%=渲染 '筆記/形式',:日期=>日期%> <% end %> <% end %>'所以這樣?然後我在控制器中放入'@notes_for_date = @ notes.group_by(&:notes_date)'。如果只有一個音符存在,那麼現在所有的形式都會消失 –