【问题标题】:Ruby put in order columns when creating CSV document from Mongoid从 Mongoid 创建 CSV 文档时,Ruby 对列进行排序
【发布时间】:2014-11-10 21:12:13
【问题描述】:

我需要从数据库创建 CSV 文档。所以我想按特定顺序组织列,我有这个顺序的模板,这个模板存储为标题数组

header = ["header1", "header2", "header3", "header4", "header5"]
record = [{"header4" =>"value4"}, {"header3" =>"value3"}, {"header5"=>"value5"}, {"header1"=>"value1"}, {"header2"=>"value2"}]

I need to get array like tis 
record = [{"header1" =>"value1"}, {"header2" =>"value2"}, {"header3"=>"value3"}, {"header4"=>"value4"}, {"header5"=>"value5"}]

但是当我做的时候

csv<< mymodel.attributes.values.sort_by! { |h| header.index(h.keys[0])

没有用

【问题讨论】:

    标签: ruby arrays csv hash mongoid


    【解决方案1】:

    当您调用mymodel.attributes 时,您会得到一个哈希值,它将属性名称(作为字符串)映射到它们的值。如果您的属性名称是 header1header5,那么 mymodel.attributes 将是这样的:

    {
      'header1' => 'value1',
      'header2' => 'value2',
      'header3' => 'value3',
      'header4' => 'value4',
      'header5' => 'value5'
    }
    

    当然,顺序取决于事情是如何从 MongoDB 中出来的。按指定顺序从哈希中提取一堆值的最简单方法是使用values_at

    mymodel.attributes.values_at(*header)
    

    【讨论】:

      猜你喜欢
      • 2013-05-26
      • 2014-10-19
      • 2015-12-24
      • 2011-01-07
      • 2019-08-23
      • 1970-01-01
      • 2021-09-04
      • 2016-03-16
      相关资源
      最近更新 更多