当从Mongoid创建CSV文档时,Ruby将顺序列放入

当从Mongoid创建CSV文档时,Ruby将顺序列放入,ruby,arrays,csv,hash,mongoid,Ruby,Arrays,Csv,Hash,Mongoid,我需要从数据库中创建CSV文档。所以我想按特定的顺序组织列,我有这个顺序的模板,这个模板存储为标题数组 header = ["header1", "header2", "header3", "header4", "header5"] record = [{"header4" =>"value4"}, {"header3" =>"value3"}, {"header5"=>"value5"}, {"header1"=>"value1"}, {"header2"=>"v

我需要从数据库中创建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])
它不起作用

当您调用mymodel.attributes时,您会得到一个哈希,它将属性名称作为字符串映射到它们的值。如果属性名称为header1到header5,则mymodel.attributes将如下所示:

{
  'header1' => 'value1',
  'header2' => 'value2',
  'header3' => 'value3',
  'header4' => 'value4',
  'header5' => 'value5'
}
当然,顺序取决于MongoDB的结果。按指定顺序从哈希中提取一组值的最简单方法是使用:

mymodel.attributes.values_at(*header)