ruby-on-rails - rails 5 : group records by "DateTime" field in tree view

标签 ruby-on-rails postgresql datetime activerecord

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

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

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

任何关于如何在 Controller /模型中构建类似东西的提示都会很棒。谢谢!

更新

在 Index 操作中,我在 Media select 的下拉菜单中传递了 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

最佳答案

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

关于ruby-on-rails - rails 5 : group records by "DateTime" field in tree view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41349588/

相关文章:

ruby-on-rails - ActiveRecord::DangerousAttributeError

mysql - 如何在不检查数据库中是否存在的情况下生成 8 个字符的唯一字符串

ruby-on-rails - 生成为 ActiveRecord::Relation 的 Rails 缓存键

c# - 带有 Entity Framework 的 SQLite DATETIME 列

javascript - 当 Laravel 中的日期和时间超过当前日期时间时,如何更改状态字段?

ruby-on-rails - Elasticsearch错误

postgresql - 具有聚合函数的 COALESCE 和 NULLIF

postgresql - 在存储函数中使用预处理语句

php - CodeIgniter 和 PostgreSQL - 从返回 refcursor 的函数中检索数据

ruby - 如何找到一年前同一周的日期?