خطأ مع مشبك / معالجة FasterCSV لاختياري CSV تحميل
-
05-07-2019 - |
سؤال
ولدي صفحة حيث يمكن للمستخدم استيراد البيانات إلى الموقع. إما في شكل نسخة واللصق في منطقة النص من التفوق، أو عن طريق تحميل ملف .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)
يرجى محاولة ومعرفة ما اذا كان حل مشكلتك.