2015-05-22 19 views
6

Sto cercando di importare dati CSV al mio db MySQL, ma sto correndo in un errore quando provo a caricare il file:Ruby on Rails 4 - Import CSV - nessuna conversione implicita nella stringa

no implicit conversion of ActionDispatch::Http::UploadedFile into String 

Questo è ciò che un riga nel file CSV si presenta come:

751,"01/17/2015","11:17:32","60","TDFSRDSK","2","10","-1","0","3","","26","3","","","1","0" 

ecco il codice per l'importazione, in product.rb

def self.import(file) 
    CSV.foreach(file) do |row| 
    id, jour, heure, valeur, app, a, b, c, d, e, f, g, h, i, j, k, l = row 
    userid = current_user.id 
    product = Product.create(date: jour, valeur: valeur,user_id: userid) 
    end 
end 

in produ ct_controller.rb

def import 
Product.import(params[:file]) 
redirect_to_root_url, notice "Products imported" 
end 

nell'indice:

<%= form_tag import_products_path, multipart: true do %> 
<%= file_field_tag :file %> 
<%= submit_tag "Import" %> 
<% end %> 

e routes.rb ho:

resources :products do 
collection {post :import} 
end 

risposta

14

Provare a dare params[:file].path nell'argomento. In questo modo,

Product.import(params[:file].path) 

Checkout this.

+0

Grazie sono riuscito a sbarazzarsi dei messaggi di errore con la soluzione, ora sembra funzionare ma nessun dato viene aggiunto alla tabella SQL – dogg

+0

Alla creazione, prova usando 'Product.create! (..)'. Quindi tirerà un'eccezione se esiste. –

+0

Grazie, suppongo che il mio mapping dei dati a SQL abbia un problema perché tutti mostrano NULL e nessuno è stato creato perché ho un "valido" sul campo nel mio modello. Cercherò di trovare il modo giusto per mappare ip – dogg

Problemi correlati