在rails上的csv import ruby​​上操作头文件

时间:2017-02-17 19:20:52

标签: ruby-on-rails ruby csv import

阿罗哈,一如既往,非常感谢任何帮助。我导入CSV并在标题中我有全部大写和冒号(例如,EXT:MAT:PIDTC是一个)。我将如何在途中操纵标题?也许我想将上面的例子更改为thisHeader或者其他东西以与我的SpiritTrial模型中的my:thisHeader属性相匹配。

class SpiritTrial < ActiveRecord::Base
 def self.import(file)
  CSV.foreach(file.path, headers: true) do |row|
   SpiritTrial.create! row.to_hash
  end
 end
end

1 个答案:

答案 0 :(得分:1)

CSV.foreach&amp;合。取一个:header_converters option,它应该是一个Proc或Proc数组,它以标题作为参数并返回该标题的新值。举个例子,你会做这样的事情:

class SpiritTrial < ActiveRecord::Base
  CSV_HEADER_MAP = {
    "EXT:MAT:PIDTC" => :thisHeader,
    # ...
  }

  CSV_HEADER_CONVERTER = ->(header) { HEADER_MAP.fetch(header, header).to_sym }

  def self.import(file)
    CSV.foreach(file.path, headers: true, header_converters: CSV_HEADER_CONVERTER) do |row|
      SpiritTrial.create! row.to_hash
    end
  end
end

您可以在repl.it上看到一个没有Rails的示例:https://repl.it/FoAj