【问题标题】:Rails 5: group records by "DateTime" field in tree viewRails 5:在树视图中按“日期时间”字段对记录进行分组
【发布时间】:2017-05-12 00:01:47
【问题描述】:

我正在努力实现树视图。我有一张表,其中有 DateTime 字段。 我需要创建一个类似这样的视图,其中记录按单个 DateTime 字段值分组

-Year
  -Month
    -Day
      /All records belonging to particular day is populated.../
     ...

可能有多年、几个月、几天,因此必须对记录进行相应的分组。出于记录分组目的,我可以使用Groupdate gem

任何关于如何在控制器/模型中构建这样的东西的提示都会很棒。谢谢!

更新

在索引操作中,我在媒体选择中的下拉菜单中传递了 media_id 以查找其展示位置。在展示位置中,我有 :adbreaks 列,它是 DateTime,我想通过它进行分组。在adbreaks 中可以加载任何随机日期时间,并且我的应用必须按年、月、日期动态分组。

/manage_inventory_controller.rb

def index
  @media = Media::Media.where(company_id: user_companies)
  end

  def update_placements
  @placements = Placements::Radios.joins(positions: :media).where('media_id = ?', params[:media_id])
  respond_to do |format|
    format.js
  end
  end

【问题讨论】:

    标签: ruby-on-rails postgresql datetime activerecord


    【解决方案1】:
    samples = 100.times.map { |n| { id: n, time: rand(10000).hours.ago } }
    
    data = samples.group_by { |rec| rec[:time].to_date }.group_by { |d, _| d.at_beginning_of_month }.group_by { |m, _| m.at_beginning_of_year }
    
    data.sort_by(&:first).each { |y, recs| puts "-#{y.year}"; recs.sort_by(&:first).each { |m, recs| puts "  -#{m.strftime '%B'}"; recs.sort_by(&:first).each { |d, recs| puts "    -#{d.day}"; recs.each { |rec| puts "      id: #{rec[:id]}" } } } }
    

    它输出:

    -2015
      -November
        -13
          id: 32
        -16
          id: 41
        -19
          id: 4
        -20
          id: 39
        -21
          id: 86
      -December
        -4
          id: 68
        -7
          id: 35
        -8
          id: 98
        -22
          id: 10
        -27
          id: 77
    -2016
      -January
        -10
          id: 37
        -19
          id: 67
        -31
          id: 85
      -February
        -2
          id: 78
        -13
          id: 89
        -16
          id: 75
        -17
          id: 36
          id: 99
        -22
          id: 28
      -March
        -9
          id: 7
        -11
          id: 66
        -16
          id: 59
        -26
          id: 18
        -29
          id: 8
      -April
        -2
          id: 3
        -8
          id: 69
        -9
          id: 60
        -11
          id: 2
        -12
          id: 33
        -15
          id: 26
        -17
          id: 17
          id: 46
        -19
          id: 13
        -22
          id: 12
        -24
          id: 64
        -27
          id: 50
        -29
          id: 14
        -30
          id: 43
      -May
        -25
          id: 82
        -26
          id: 11
      -June
        -3
          id: 72
        -8
          id: 92
        -14
          id: 25
        -19
          id: 15
        -22
          id: 95
        -23
          id: 56
        -26
          id: 80
        -27
          id: 87
        -29
          id: 19
      -July
        -1
          id: 6
        -2
          id: 81
        -3
          id: 1
        -6
          id: 88
        -7
          id: 65
        -15
          id: 91
        -17
          id: 27
        -20
          id: 38
        -26
          id: 73
      -August
        -1
          id: 0
        -7
          id: 30
        -8
          id: 79
        -15
          id: 9
        -23
          id: 24
        -25
          id: 21
      -September
        -1
          id: 52
        -7
          id: 48
        -9
          id: 34
        -10
          id: 54
          id: 55
        -22
          id: 70
        -27
          id: 23
        -29
          id: 94
      -October
        -2
          id: 22
        -7
          id: 51
        -23
          id: 63
        -24
          id: 57
          id: 62
        -28
          id: 58
          id: 76
        -29
          id: 90
        -31
          id: 49
      -November
        -5
          id: 5
          id: 45
        -6
          id: 61
        -9
          id: 93
        -12
          id: 83
        -13
          id: 71
        -16
          id: 53
        -17
          id: 29
        -21
          id: 44
        -23
          id: 84
      -December
        -9
          id: 31
        -13
          id: 16
        -14
          id: 47
        -16
          id: 42
        -17
          id: 20
          id: 96
        -18
          id: 97
        -19
          id: 74
        -23
          id: 40
    

    【讨论】:

    • 谢谢!看起来这可能是我需要的东西。如果我理解正确,您能否检查我上面的更新并发表评论-在我的情况下@placements 将是samples,对吗?另外 - 如果我想加载输出年份然后选择特定年份 -> 月份,然后选择月份 -> 天,我应该改变什么?
    猜你喜欢
    • 2012-11-15
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 1970-01-01
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多