문제

사용자가 사이트로 데이터를 가져올 수있는 페이지가 있습니다. 복사 형태와 Excel에서 텍스트 영역으로 붙여 넣거나 .csv 파일을 업로드하여.

컨트롤러는 CSV가 업로드되었는지 확인합니다. 그렇다면이를 처리하면 붙여 넣은 컨텐츠를 처리합니다. (사용자는 현재 하나의 옵션 만 선택할 것입니다).

복사 및 붙여 넣기 부품은 완벽하게 작동하지만 업로드 된 CSV 파일을 처리하려고 할 때 문제가 발생합니다.

오류가 발생합니다.

ActionController :: uploadedTempFile을 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

본질적으로 사용자가 "프로세스"버튼을 누르지 않도록 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