2017-02-17 26 views
0

阿罗哈一如既往,非常感谢您的帮助。我正在导入一个CSV文件,并在头文件中包含全部大写和冒号(例如,EXT:MAT:PIDTC是一个)。我将如何去处理在途中的标题?也许我想把上面的例子改成thisHeader或者在我的SpiritTrial模型中与我的:thisHeader属性相匹配。在csv上操纵标题在rails上导入ruby

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

CSV.foreach & co。采取:header_convertersoption,这应该是采取的报头作为参数,并用于该头返回一个新的值PROCS的一个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 

你可以看到一个例子SANS的Rails上repl.it:https://repl.it/FoAj