【问题标题】:Rails format result when grouping across multiple columns跨多列分组时的 Rails 格式结果
【发布时间】:2023-01-07 23:57:23
【问题描述】:

我正在尝试在我的车辆 API 中添加对多个组的支持。目前我们只支持像这样按单列分组。

Vehicle.group(:fuel_type).count

这给了我这样的结果:

{
  "Petrol": 78,
  "Diesel": 22
}

当我像这样添加多个组时:

Vehicle.group(:fuel_type, :registration_status).count

我得到以下结果,这在 API 响应中不是很好。此外,由于计数为 0,因此缺少 Petrol 和 Exported 的组合。

{
  "['Diesel', 'Scrapped']": 5,
  "['Petrol', 'Registered']": 6,
  "['Petrol', 'Scrapped']": 30,
  "['Diesel', 'Registered']": 1,
  "['Diesel', 'Deregistered']": 11,
  "['Petrol', 'Deregistered']": 42,
  "['Diesel', 'Exported']": 5
}

我希望它的格式是这样的:

{
  "Diesel": {
    "Scrapped": 5,
    "Registered": 1,
    "Deregistered": 11,
    "Exported": 5
  },
  "Petrol": {
    "Scrapped": 30,
    "Registered": 6,
    "Deregistered": 42,
    "Exported: 0
  }
}

理想情况下,我想支持 n 嵌套组,其中每个组合都显示在每一层中,例如。即使没有出口汽油车,它仍应包含在计数为 0 的响应中。

【问题讨论】:

  • 您在这里要做的远远超出了 ActiveRecord::Calculations 所做的范围,这只是微不足道的聚合,而这不是 rails 会神奇地为您做的事情。分组将为您提供每个组的行以及该组的聚合 - #count 只是勉强聪明到可以将一个简单的结果转换为散列。

标签: ruby-on-rails group-by format


【解决方案1】:

我实际上将我的问题发布到 openAI 的 ChatGPT 并得到了一个有效的实现。这是 sn-p,以防有人遇到类似问题:

def handle_hash(query)
  return query unless query.is_a?(Hash)
  result = {}

  query.each do |key, value|
    if key.is_a?(String)
      result[key] = value
    else
      current = result
      key[0...-1].each do |element|
        current[element] ||= {}
        current = current[element]
      end
      current[key[-1]] = value
    end
  end

  result
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-09
    • 1970-01-01
    • 2015-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多