2016-05-05 9 views
1

私が使用する計測器はデータのCSVファイルを出力しますが、列名を制御することはできません。私は自分のデータベースにインポートするには、次のコードを使用できるように、(生のCSVファイルを編集せずに)データをインポートする前にヘッダー行を変更したい:Rails 4 + CSV:csvヘッダーを変更

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

どのように私は完全にヘッダー行を置き換えます私自身のものと一緒に?

答えて

3

をあなたは使用してラムダと:header_convertersオプションを使用することができますルックアップテーブル。

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

名前に変換するのが簡単な場合は、ラムダの名前に変更を加えるだけです。

ヘッダーの名前を完全に変更する場合は、Ivanの答えでこのメソッドを使用できます。

+0

1つの問題は、 'convert'以外のヘッダは空になります –

+1

' convert [name] ||ラムダの "プレースホルダ"。これは、ルックアップハッシュにない場合は、ラベルを「プレースホルダ」にデフォルト設定します。 – ollpu

+0

私はこの問題を作成している可能性のある 'new'を使用しています。指定したものを変更したいだけで、他はすべて同じにしておきます。 ' CSV.new(body、headers:true、header_converters:lambda {名前] .to_sym}、コンバーター::すべて) ' –

関連する問題