Rails 4 + CSV:更改csv标头

Jer*_*mas 1 csv ruby-on-rails

我使用的仪器输出数据的CSV文件,但是我无法控制列名。我想在导入数据之前更改标题行(无需编辑原始CSV文件),以便可以使用以下代码将其导入数据库:

def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
    Foo.create! row.to_hash
  end
end  
Run Code Online (Sandbox Code Playgroud)

如何用自己的一个完全替换标题行?

oll*_*lpu 5

您可以将:header_converters选项与使用查找表的lambda一起使用。

convert = {"from" => "to", "bad" => "good"}
CSV.foreach(file.path, headers: true, header_converters: lambda { |name| convert[name] }) do |row|
...
Run Code Online (Sandbox Code Playgroud)

如果要对名称进行的转换更简单,则只需在lambda中对名称进行更改即可。

如果要完全重命名标题,可以使用Ivan的答案中的方法。

  • 尝试像“convert[name] ||”这样的东西 lambda 中的“占位符”。如果标签不在查找哈希中,则默认标签为“占位符”。 (2认同)