質問

ユーザーがサイトにデータをインポートできるページがあります。コピーして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)

試してみて、問題が解決するかどうかを確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top