Question

J'ai une page sur laquelle un utilisateur peut importer des données sur le site. soit sous forme de copier / coller dans une zone de texte d'Excel, soit en téléchargeant un fichier .csv.

Le contrôleur vérifie si un csv a été chargé. S'il le traite, il traitera le contenu collé. (en partant du principe que l’utilisateur ne choisira qu’une option pour le moment).

La partie copier-coller fonctionne parfaitement, cependant, le problème se pose lorsque je tente de traiter le fichier csv téléchargé:

je reçois le message d'erreur:

  

ne peut pas convertir   ActionController :: UploadedTempfile   en chaîne

#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

J'essaie essentiellement de télécharger et de traiter le fichier csv en une seule opération, sans avoir à demander à l'utilisateur d'appuyer sur un "processus". bouton.

Était-ce utile?

La solution

Sur la ligne 6 ci-dessus

if params[:guest_list_csv]
  lines = parse_csv_file(params[:guest_list_csv])
else
  #csv file uploaded
  lines = params[:guest_list_paste]
end

Le problème est que params [: guest_list_csv] n'est pas la chaîne réelle, ni le chemin d'accès, puisqu'il s'agit d'un objet fichier. Ce dont vous avez besoin, c'est d'appeler explicitement #path dessus.

# line 6
  lines = parse_csv_file(params[:guest_list_csv].path)

Essayez-le et voyez s'il résout votre problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top