2012-05-11 1 views
1

Rails를 통해 데이터베이스로 가져 오려는 Excel 스프레드 시트의 데이터가 있습니다. 나는 Rails 3.2.3과 Ruby 1.9.2를 사용하고있다.SQL 파일 또는 Excel 파일에서 Rails를 통해 데이터베이스로 데이터 가져 오기

데이터는 사용자 이름과 암호이며 파일 이름은 member.xlsx입니다.

<%= form_for @member do |f| %> 
    <%= f.text_field :import, 
     :maxlength=>'50', 
     :style=>'width: 250px;', 
     :placeholder => 'browse file *.sql or *.xlsx' %> 
    <%= f.submit %><% end %> 

내 테이블 :

create_table :members do |t| 
    t.string :username 
    t.string :password_hash 
    t.string :password_salt 

Excel 파일 및 Excel 파일을 업로드하기위한 CarrierWave 보석을 구문 분석을 위해 내가 스프레드 시트 보석을 사용하고

솔루션

를 해결 . 나는 사용자에 대한 유증 모델을 사용하고 있기 때문에, 여기

def import 
    if params[:excel_file].nil? 
     redirect_to user_new_import_path, :flash => { :error => 'You have not selected a file'} 
    else 
     test_file = params[:excel_file] 
     file = ExcelUploader.new 
     file.store!(test_file) 
     book = Spreadsheet.open "#{file.store_path}" 
     sheet1 = book.worksheet 0 
     sheet1.each 1 do |row| 
     name = row[0] 
     email = row[2] 
     generated_password = Devise.friendly_token.first(6) 
     temp_password = generated_password 
     @user = User.create(:name => name, :email => email, :password => temp_password, :password_confirmation => temp_password)  
     UserMailer.password_send(@user).deliver 
     end 
     if @user.save 
     redirect_to users_path, :notice => "success" 
     else 
     redirect_to new_import_user_path, :flash => { :error => 'error. try again' } 
     end 
    end 
end 
+0

"* 이것을 할 수있는 가장 좋은 방법을 보여줄 수있는 코드를 몇 개 줄 수 있습니까?". 아니, 그게 무슨 뜻이야. 먼저 시도한 다음 작동하지 않는 경우 더 구체적인 질문으로 되돌아 가십시오. – eggyal

+1

StackOverflow에 오신 것을 환영합니다! 모든 유용한 대답을 upvote하는 것을 잊지 마십시오. 다른 사람들의 질문에 대한 답변 포함. 그리고 자신의 질문에 대한 최상의 답을 수락/확인하십시오. –

답변

1

는 SQL이 DB에 아무것도 할 수 이후 SQL 파일이 끔찍한 아이디어 가져 오기 같은 파일을 가져 오기위한 컨트롤러가 어떻게 표시되는지를 보여줍니다.

Excel 파일 가져 오기가 정상적으로 작동합니다. 데이터를 읽는 Excel gem이 있습니다. roo 보석은 xlsx 형식에서 사용할 수 있지만 테스트하지 않았습니다. 사용자에게 Excel을 사용하여 파일을 xls 형식으로 저장 한 다음 업로드합니다.

(개발자의 관점에서 볼 때) csv 파일을 가져 오는 것이 더 좋습니다. csv의 단점은 파일에 정확히 하나의 테이블 만 있다는 것입니다.

한편 Excel 가져 오기의 문제점은 사람들이 셀의 값보다는 수식을 사용하여 여러 탭 파일을 제공 할 수 있다는 것입니다. 따라서 많은 오류 검사를 포함해야합니다.

자주 발생하는 문제 : 코드에서 Date 개체를 예상 할 때 사람들이 Excel 시트에 문자열로 날짜를 입력합니다. 또는 사람들이 문자열로 입력 한 숫자. 코드에서 이러한 문제를 테스트하고 처리해야합니다.

http://rubygems.org/gems/roo

다시보기 : "좀 코드를 제공"- StackOverflow의 작동 방법을 그건 아니다. 다행히도 위의 내용은 여행에 도움이 될 것입니다.

+0

백 엔드를 통해 백업 및 복원 데이터가 필요합니다. 끔찍한 일은 아닙니다. –

+0

백 엔드 백업 및 복원 유형 방법의 경우 레이크 작업을 수행하는 것이 좋습니다. SQL 입력의 경우 [SQL 실행 메소드] (http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-execute)를 사용할 수 있습니다. –

관련 문제