0

我有以下内容:

目标和日志条目。

一个目标有自己的一组日志条目。

我进了4个球。

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

卡路里、碳水化合物、脂肪和蛋白质。

我想提取每个目标的所有日志条目,然后按日期对它们进行分组,这样我就可以将它们显示在这样的表格中:

宏表

如何遍历每个目标,然后按日期对所有日志条目进行分组,然后在视图中呈现?


现在我只能理解如何遍历每个目标日志条目,但是我将无法为每个目标类型显示分组行。它看起来像每个目标的单独表格。相反,我想为每个目标的每个日期的日志条目创建一行。

编辑:这是我一半的讨厌方式:

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

我不确定如何按日期分组?目标是按日期对所有 log_entries 进行分组,以便在日期匹配的每个条目都可以是一行。

4

1 回答 1

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 %>
于 2013-10-25T23:43:14.547 回答