옵션 CSV 업로드를위한 PaprClip / FasterCSV 처리 오류
-
05-07-2019 - |
문제
사용자가 사이트로 데이터를 가져올 수있는 페이지가 있습니다. 복사 형태와 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)
시도해보고 문제가 해결되는지 확인하십시오.
제휴하지 않습니다 StackOverflow