オプションのcsvアップロードのPaperclip / FasterCSV処理のエラー
-
05-07-2019 - |
質問
ユーザーがサイトにデータをインポートできるページがあります。コピーしてExcelからテキスト領域に貼り付けるか、.csvファイルをアップロードします。
コントローラーは、csvがアップロードされているかどうかを確認します。アップロードされている場合はこれを処理し、アップロードされていない場合は貼り付けられたコンテンツを処理します。 (今のところ、ユーザーは1つのオプションのみを選択するという前提で作業しています)。
コピーアンドペースト部分は完全に機能しますが、アップロードされた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を1つのスムーズなアクションでアップロードして処理しようとしています。ボタン。
解決
上記の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