2016-08-31 5 views
0

Im Hinzufügen einer Import-Funktion zu meiner Rails-App .. Ich möchte die Möglichkeit haben, Benutzer zu importieren, aber meine Benutzer Tabellenspalten sind kurze Hand dh. f_name = firs name l_name = Nachname usw. Ich möchte ein Import-Tool erstellen, das Benutzer aus der App herunterladen und ausfüllen können, um die Zeit für die ersten Benutzerimporte zu sparen (dies wird auch für andere Modelle verwendet). .) Gibt es eine Möglichkeit, die Importmethode zum Lesen von benutzerdefinierten Headern festzulegen? Ich habe versucht, das herauszufinden, aber nicht viel zurück. Vielleicht ist es so, wie ich die Frage formuliere?Benutzerdefinierte Header für Schienen 4 CSV Import

Wie es jetzt die Importfunktion sitzt arbeitet, aber wer will wirklich eine böse unscheinbare Excel-Blatt ..

My Import Controller Aktion:

def import 
    User.import(params[:file]) 
    redirect_to users_path, notice: 'Users Added Successfully' 
    end 

Meine Import-Klasse-Funktion:

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

Antwort

1

Sie können eine Methode erstellen, um die Kopfzeile selbst zu ersetzen. Lies die Datei in den Speicher und ändere die erste Zeile. Führen Sie dann die CSV.foreach. Ich bin sicher, es gibt einen besseren Weg, dies zu einrücken ...

def self.headers 
    {"last name" => "l_name", 
    "first name" => "f_name"} 
end 
def self.import(file) 
    CSV.parse(self.parse_headers(file), headers: true) do |row| 
     User.create! row.to_hash 
    end 
end 
def self.parse_headers (file) 
    File.open(file) { |f| 
       first_line = f.readline 
       self.headers.each { |k,v| first_line[k] &&= v } 
       first_line + f.read } 
end 
+0

im diesen Fehler „keine implizite Konvertierung von Symbol in String“ bekommen - und seine Referenzierung das self.parse_headers (Datei) Methode self.headers.each {| k, v | first_line [k] && = v} als die Fehlerzeile –

+0

Ich habe aktualisiert, sollte die Konvertierung beheben. –

+0

fantastisch! Vielen Dank für deine Hilfe! Das hat den Trick gemacht! –