2013-08-07 3 views
0

Я пытаюсь вставить данные через csv в базу данных. Это мой код контроллераИмпорт данных CSV в базу данных MYSQL с использованием RUBY

 

    require 'csv' 
     def index 

     end 

     def add 
     @filename=CSV::Reader.parse(params[:dump][:file]) 
     n=0 
     CSV::foreach(@filename, :headers => true) do |row| 
     Student.new(row.to_hash.symbolize_keys).save 
     n=n+1 
     end 
     flash.now[:message]="CSV Import Successful, #{n} new records added to data base" 
     end 

Теперь, когда я вставить файл CSV, я получаю ошибку

**can't convert CSV::IOReader into String** 

Мой рубин версия 1.8.7

Любая помощь будет оценена.

ответ

0

Если вы используете Ruby, вы можете использовать следующий код:

require 'csv' 

def index 

end 

def add 
    n=0 
    CSV::foreach(params[:dump][:file]) do |row| 
    Student.new(row.to_hash.symbolize_keys).save 
    n=n+1 
    end 
    flash.now[:message]="CSV Import Successful, #{n} new records added to data base" 
end 

Вы можете получить более подробную информацию о CSV: Еогеасп на http://apidock.com/ruby/CSV


мне не удалось с выше ответ, потому что я предположил, что файл [: dump] [: file] - это путь к файлу (строковый объект), но, увидев эту ошибку, вы должны сначала прочитать файл (это объект TempFile), а затем проанализировать содержимое как строку:

require 'csv' 
    def index 

    end 

    def add 
    n=0 
    CSV::parse(params[:dump][:file].read, :headers => true) do |row| 
     Student.new(row.to_hash.symbolize_keys).save 
     n=n+1 
    end 

    flash.now[:message]="CSV Import Successful, #{n} new records added to data base" 
    end 
+0

спасибо за это, но теперь я получаю эту ошибку: - ** не может преобразовать Tempfile в строку ** – Rockr

+0

Okk dis работает ... но я застрял на чем-то новом .. ** неинициализированная константа DataImportController: : Студент ** Я думаю, что это проблема с маршрутизацией. Можете ли вы предоставить код для этого. – Rockr

+0

У меня это исправлено .. но когда я добавляю данные, он говорит ** не может дублировать Fixnum ** любую идею об этом/? – Rockr