2012-05-25 26 views
1

我正在構建一個小應用程序,它將輸入的內容輸入到輸入字段中,並在輸入字段的正下方顯示它們。在解析和分隔日期/修復數據對象時遇到問題

此代碼的目標是按日期分隔這些條目,以便在6月1日發佈的所有內容都在它們之間用一個換行符發佈,而6月2日的第一個條目與6月1日之間的條目之間有2個空格

這是我的代碼,它沒有按照計劃行事,但我不明白爲什麼,我認爲它源於第3行,並且我做錯了。 (注:我知道這並不能解釋在一個月或一年的變化但我會得到,一旦我找出正確的日期間隔。)

<% for i in (0..(@allLessons.count-1)) %> 

<b><%= @date[i].created_at.strftime('%b %d')%></b><br/> 

<% if @date[i].created_at.strftime('%d') == @date[i-1].created_at.strftime('%d') %> 

<%= @date[i].created_at.strftime('%d') %> <br /> 

<% else %> 

<%= @date[i].created_at.strftime('%d') %><br /><br /> 

<% end %>   
<% end %> 

從控制器:

@allLessons = Lesson.all 
@date = Lesson.find(:all, :order => 'created_at ASC') 

任何幫助你可以借給這個將非常感激!

回答

1

塊和迭代器是它的位置。

@allLessons = Lesson.order('created_at ASC') 
@dates = @allLessons.group_by { |lesson| lesson.created_at.beginning_of_day }.sort 

<% @dates.each do |date, lessons| %> 
    <% lessons.each do |lesson| %> 
    <b><%= lesson.created_at.strftime("%d") %></b><br /> 
    <% end %> 
    <br /> 
<% end %> 

註釋

首先,我們得到了所有課程的一起。這是equivilant找到(:全部:爲了=「created_at ASC」>),但我喜歡這個新的,緊湊語法

@allLessons = Lesson.order('created_at ASC') 

然後我們組所有這些彙集成一個散列結果,其中的關鍵是日期和該值是當天創建的記錄數組。 beginning_of_dayDateTime轉換爲Date,其中時間設置爲00:00:00。所以,2012-05-25 18:00變成2012-05-25 00:00:00。這是爲了讓集團的日期自己沒有時間的方式獲得

@dates = @allLessons.group_by { |lesson| lesson.created_at.beginning_of_day }.sort 

@dates現在是一個散列結果,其中的關鍵是日期和值是自該日起的教訓陣列。例如,{ '2012-05-24 00:00:00' => [ lesson_1 ], 2012-05-25 00:00:00' => [ lesson_2, lesson_3 ]

然後,我們將散列傳遞到塊中,其中鍵是日期,值是教訓陣列。這就是說,對於每個日期...

<% @dates.each do |date, lessons| %> 

給我屬於那個日期的課程。併爲每個那些...

<% lessons.each do |lesson| %> 

打印出來的教訓

<b><%= lesson.created_at.strftime("%d") %></b><br /> 
    <% end %> 

對移動到下一個日期之前的日期,打印<br />

<br /> 
<% end %> 
+0

謝謝!我是Ruby的新人,所以我仍然在學習塊。你能解釋一下你到底在何處以及如何將它們分開嗎?它在'@dates = @ allLessons'行嗎?對於代碼的工作原理我還是有點困惑 –

+0

當然!我要編輯這篇文章,所以給我幾分鐘。 –

+0

非常感謝。我要去研究這些廢話。再次感謝你的幫助!:) –