Fehler bei der Papierklammer / FasterCSV Verarbeitung für optionalen csv-Upload
-
05-07-2019 - |
Frage
Ich habe eine Seite, wo ein Benutzer Daten auf die Website importieren. entweder in Form von Kopie und Einfügen in einen Textbereich aus Excel oder durch eine CSV-Datei hochgeladen werden.
Der Controller prüft, ob ein csv hochgeladen wurde - wenn so diese es verarbeitet, sonst wird es den eingefügten Inhalt verarbeiten. (Arbeiten an der Annahme der Benutzer nur eine Option wählen, für jetzt).
Die Kopie und Teil Paste funktioniert perfekt, aber das Problem entsteht, wenn ich versuche, die hochgeladen CSV-Datei zu verarbeiten:
Ich erhalte die Fehlermeldung:
nicht konvertieren Action :: UploadedTempfile in String
#events_controller
def invite_save
@event = Event.find(params[:id])
if params[:guest_list_csv]
lines = parse_csv_file(params[:guest_list_csv])
else
#csv file uploaded
lines = params[:guest_list_paste]
end
if lines.size > 0
lines.each do |line|
new_user(line.split)
end
flash[:notice] = "List processing was successful."
else
flash[:error] = "List data processing failed."
end
end
private
def parse_csv_file(path_to_csv)
lines = []
require 'fastercsv'
FasterCSV.foreach(path_to_csv) do |row|
lines << row
end
lines
end
def new_user(line)
#code to create new user would go here
end
Ich bin versucht, im Wesentlichen die csv in einer glatten Aktion zu laden und zu verarbeiten, anstatt zu haben, um den Benutzer zu erhalten eine „Prozess“ Taste drücken.
Lösung
Auf der Linie # 6 oben
if params[:guest_list_csv]
lines = parse_csv_file(params[:guest_list_csv])
else
#csv file uploaded
lines = params[:guest_list_paste]
end
Das Problem ist params[:guest_list_csv]
ist nicht die eigentliche Zeichenfolge, weder ist der Weg, da es sich um ein Dateiobjekt ist. Was Sie brauchen, ist #path
die explizit nennen.
# line 6
lines = parse_csv_file(params[:guest_list_csv].path)
Bitte versuchen Sie es und sehen, ob es das Problem behebt.