2012-05-11 120 views
1

我有一個Excel電子表格中的數據,我想通過Rails將其導入到數據庫中。我正在使用Rails 3.2.3和Ruby 1.9.2。通過Rails將數據從SQL文件或Excel文件導入數據庫

數據是用戶名和密碼,文件名是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!記得點贊所有有用的答案。包括解答他人的問題。並接受/檢查你自己問題的最佳答案。 –

回答

1

導入SQL文件是一個可怕的想法,因爲SQL可以做任何事情你的分貝。

導入Excel文件可以正常工作。有Excel的寶石讀取數據。 roo gem可用於xlsx格式,但我沒有對其進行測試。我告訴用戶使用Excel以xls格式存儲文件,然後他們上傳文件。

更好的(從應用程序開發人員的角度來看)是導入csv文件。 csv的缺點是該文件只包含一個表格。

另一方面,Excel導入的一個問題是人們可以爲您提供多個選項卡文件,其中包含公式而不是單元格中的值等。因此,請確保包含大量錯誤檢查。

頻繁的問題:當您的代碼需要Date對象時,人們在Excel工作表中輸入日期作爲字符串。或人們作爲字符串輸入的數字。你的代碼應該測試和處理這些問題。

http://rubygems.org/gems/roo

回覆: 「給我一些代碼」 - 這不是StackOverflow的是如何工作的。希望以上內容能夠幫助你完成旅程。

+0

我需要通過後端進行後端,備份和恢復數據,這並不可怕。 –

+0

對於後端,備份和恢復類型的方法,推薦使用rake任務。對於sql輸入,您可以使用[SQL執行方法](http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-execute) –

相關問題