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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top