2017-02-17 9 views
0

アロハはいつものように、どんな助けでも大歓迎です。私はCSVをインポートしています。ヘッダーにはすべて大文字と小文字があります(たとえば、EXT:MAT:PIDTCは1つです)。どのように私は途中でヘッダーを操作するつもりですか?多分私はthisHeaderか、私のSpiritTrialモデルのthisHeader属性とマッチするものに上の例を変更したいと思うかもしれません。csvでヘッダを操作する。ruby on rails

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 &共同。 :header_convertersoptionをとります。これはProcまたはProcsの配列で、ヘッダーを引数として受け取り、そのヘッダーに新しい値を返します。 https://repl.it/FoAj

:あなたはrepl.it上の例のサンセリフレールを見ることができます

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 

:あなたの例を考えると、あなたはこのような何かをするだろう

関連する問題