【问题标题】:Group by date through a collection's children通过集合的孩子按日期分组
【发布时间】:2013-10-25 23:21:55
【问题描述】:

我有以下几点:

目标和日志条目。

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

我有 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 进行分组,以便在某个日期匹配的每个条目都可以是一行。

【问题讨论】:

    标签: ruby-on-rails


    【解决方案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 %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-06-09
      • 2021-03-08
      • 1970-01-01
      • 2021-01-15
      • 1970-01-01
      • 1970-01-01
      • 2019-04-03
      相关资源
      最近更新 更多