2009-10-23 7 views
0

J'ai une page où un utilisateur peut importer des données sur le site. soit sous la forme d'une copie et d'un collage dans une zone de texte à partir d'Excel, soit en téléchargeant un fichier .csv.Erreur avec Paperclip/FasterCSV Traitement pour le téléchargement csv optionnel

Le contrôleur vérifie si un csv a été téléchargé - si c'est le cas, il traite le contenu collé. (en supposant que l'utilisateur choisira seulement une option pour l'instant).

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 l'erreur:

can't convert ActionController::UploadedTempfile into 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 

Je suis essentiellement en essayant de télécharger et de traiter le CSV en une seule action, plutôt que d'avoir à pousser l'utilisateur à appuyer sur un bouton "traiter".

+0

Pouvez-vous également afficher les fichiers de vue et de modèle? –

Répondre

2

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 params[:guest_list_csv] est pas la chaîne réelle, ni est le chemin, car il est un objet de fichier. Ce dont vous avez besoin est explicitement appeler #path dessus.

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

Veuillez essayer et voir si cela résout votre problème.

Questions connexes