我使用的仪器输出CSV文件的数据,但我无法控制列名。我想在导入数据之前更改标题行(不编辑原始CSV文件),以便我可以使用以下代码导入到我的数据库中:
def self.import(file)
CSV.foreach(file.path, headers: true) do |row|
Foo.create! row.to_hash
end
end
如何使用我自己的标题行完全替换标题行?
答案 0 :(得分:4)
您可以将:header_converters
选项与使用查找表的lambda一起使用。
convert = {"from" => "to", "bad" => "good"}
CSV.foreach(file.path, headers: true, header_converters: lambda { |name| convert[name] }) do |row|
...
如果要对名称进行的转换更简单,则可以将更改应用于lambda中的名称。
如果要完全重命名标题,可以在Ivan的答案中使用该方法。
答案 1 :(得分:0)
您可以将自定义列名称数组而不是简单的true
值传递给标题选项:
CSV.foreach(file.path, headers: ['name', 'birthdate', 'gender'])
来源:http://ruby-doc.org/stdlib-2.2.0/libdoc/csv/rdoc/CSV.html#method-c-new