2013-08-07 3 views
0

프런트 엔드에서 mysql에 루비를 사용하여 CSV 파일 가져 오기를 구현하고 있습니다. 이것은 내 컨트롤러 코드입니다.루비를 사용하여 MySQL 데이터 가져 오기

 

    require 'csv' 

     def csv_import 
     @parsed_file=CSV::Reader.parse(params[:dump][:file]) 
     n=0 
     @parsed_file.each do |row| 
     c=CustomerInformation.new 
     c.job_title=row[1] 
     c.first_name=row[2] 
     c.last_name=row[3] 
     if c.save 
      n=n+1 
      GC.start if n%50==0 
     end 
     flash.now[:message]="CSV Import Successful, #{n} new records added to data base" 
     end 

이것은 제 프런트 엔드 코드입니다.

<pre> 
<% form_for :dump, :url=>{:controller=>"customer_informations", :action=>"csv_import"}, :html => { :multipart => true } do |f| -%> 
<table"> 
    <tr> 
    <td> 
     <label for="dump_file"> 
     Select a CSV File : 
     </label> 
    </td> 
    <td > 
     <%= f.file_field :file -%> 
    </td> 
    </tr> 
    <tr> 
    <td colspan='2'> 
     <%= submit_tag 'Submit' -%> 
    </td> 
    </tr> 
</table> 
<% end -%> 
</pre> 

내가 원하는 것은 DB에 약 30 개의 열이 있고, CSV에는 30 개의 열 머리글이 포함됩니다. 또한 검열을 위해 필자는 textfield를 사용하여 열 중 하나를 입력으로 요청하므로 csv 시트에 29 개의 열을 만듭니다. 사용자가 선택한 옵션에 따라 복용량 29 열은 텍스트 상자에서 선택한 항목과 연결됩니다.

도움을 주시면 감사하겠습니다. 당신이 헤더를 한 경우

는 다음과 같이 테이블 컬럼과 같은, 당신의 코드가 간단해야 당신에게

답변

0

감사합니다

CSV::foreach(filename, :headers => true) do |row| 
    Model.new(row.to_hash).save 
end 
+0

그래서 파일에 임의의 열을 남기면 데이터 열에 데이터를 삽입하지 않습니다. – Rockr

+0

죄송합니다. 나는 그 문장을 전혀 이해하지 못합니다. – pguardiario

+0

나는 내 데이터베이스에 열이 30 개 있다는 것을 의미합니다. 컬럼 헤더가있는 Excel 파일에서 29 개 컬럼 만 만들면 컬럼 헤더별로 데이터를 조정하고 배치 할 것입니다. – Rockr

관련 문제