2013-10-25 43 views
0

我有以下內容:通過收集的孩子按日期分組

目標和日誌條目。

目標有自己的一組日誌條目。

我拉4個球。

@goals = @user.goals.where(name: Goal::DIET_NAMES) 

卡路里,碳水化合物,脂肪和蛋白質。

我想按日期把所有的日誌條目爲每個這些目標,然後將它們分組,這樣我就可以在這樣的表格中顯示出來:

Table of macros

我如何可以遍歷通過每個目標,然後按日期分組所有日誌條目,然後在視圖中進行渲染?


現在,我只能理解如何遍歷每個目標日誌條目,但隨後我就無法顯示分組行對每個目標的類型。它看起來像是每個目標的獨立表格。相反,我想爲每個日期的每個目標的日誌條目創建一行。

編輯:這裏是一個討厭的方式,我有一半的路:

@log_entries = [] 
    @goals.each do |goal| 
    @log_entries << goal.log_entries 
    end 
    @log_entries.flatten! 

我不知道如何組按日期有關係嗎?目標是按日期對所有log_entries進行分組,以便每個日期匹配的行可以是一行。

回答

1

試試這個:

@goals = @user.goals.where(name: Goal::DIET_NAMES).includes(:log_entries) 
# using includes to eager load the log entries (not necessary but optimizes db queries) 

@log_entries = @goals.flat_map(&:log_entries). 
         group_by{|x| x.created_at.to_date} 
# returns an Array of hashes where 
# key is the created date 
# value is an Array of log entries for that date 
# E.g. [{created_date1 => [log1,log2..]}, {created_date2 => [log3,..]}..] 

# In view 
<%= @log_entries.each do |date, logs| %> 
    #here logs is an array of log entries for the date 
<% end %> 
+0

我愛你。謝謝。 –