Ошибка при обработке Paperclip / FasterCSV для дополнительной загрузки CSV

StackOverflow https://stackoverflow.com/questions/1610751

Вопрос

У меня есть страница, на которой пользователь может импортировать данные на сайт. либо в форме копирования и вставки в текстовую область из Excel, либо путем загрузки файла .csv.

Контроллер проверяет, был ли загружен CSV - если это так, он обрабатывает это, иначе он будет обрабатывать вставленный контент. (работая исходя из предположения, что пользователь пока выберет только один вариант).

Часть копирования и вставки работает отлично, однако проблема возникает, когда я пытаюсь обработать загруженный CSV-файл:

Я получаю ошибку:

  

не может конвертировать   ActionController :: UploadedTempfile   в строку

#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

По сути, я пытаюсь загрузить и обработать CSV одним плавным действием, а не заставлять пользователя нажимать " обрабатывать " Кнопка.

Это было полезно?

Решение

В строке № 6 выше

if params[:guest_list_csv]
  lines = parse_csv_file(params[:guest_list_csv])
else
  #csv file uploaded
  lines = params[:guest_list_paste]
end

Проблема в том, что params [: guest_list_csv] не является реальной строкой и не является путем, поскольку это файловый объект. Вам нужно явно вызвать #path .

# line 6
  lines = parse_csv_file(params[:guest_list_csv].path)

Пожалуйста, попробуйте и посмотрите, решит ли это вашу проблему.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top