我有以下内容:
目标和日志条目。
目标有自己的一组日志条目。
我进了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进行分组,以便每个日期匹配的日期可以是一行。
答案 0 :(得分: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 %>