2016-05-05 7 views
1

Ein Instrument, das ich verwende, gibt eine CSV-Datei mit Daten aus, aber ich kann die Spaltennamen nicht steuern. Ich mag die Kopfzeile ändern, bevor die Daten zu importieren (ohne die rohe CSV-Datei zu bearbeiten), so dass ich den folgenden Code verwenden kann, in meine Datenbank zu importieren:Rails 4 + CSV: csv-Header ändern

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

Wie kann ich die Kopfzeile vollständig ersetzen mit einem meiner eigenen?

Antwort

3

Sie die :header_converters Option mit einem Lambda verwenden können, die verwendet eine Nachschlagetabelle.

Wenn die Transformationen, die Sie an den Namen vornehmen möchten, einfacher sind, können Sie nur Änderungen auf den Namen im Lambda anwenden.

Sie können die Methode in Ivan Antwort verwenden, wenn Sie die Header vollständig umbenennen möchten.

+0

Ein Problem, andere Header außer 'convert' werden leer –

+1

Versuchen Sie etwas wie' convert [Name] || "Platzhalter" 'im Lambda. Dies wird die Bezeichnung auf "Platzhalter" setzen, wenn sie nicht im Nachschlage-Hash enthalten ist. – ollpu

+0

Ich benutze 'new', das könnte dieses Problem verursachen, da ich nur die angegebene ändern möchte und alle anderen gleich bleiben sollten ' CSV.new (body, headers: true, header_converters: Lambda {| name | convert [ name] .to_sym}, Konverter:: all) ' –