2012-05-11 31 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宝石を解析するためのスプレッドシートの宝石を使用してい

ソリューション

を解決。私は、ユーザーのためのモデルを考案使用しているため、SQLは、あなたのDBに何かをする可能性があるので、ここでファイルをインポートするためのコントローラは、SQLファイルをインポートする

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

"*これを行うための最善の方法を示すコードをいくつか教えてもらえますか?"いいえ、それはSOのためではありません。最初に行ってから、それが機能しない場合は、より具体的な質問に戻ってください。 – eggyal

+1

ようこそStackOverflowへ!すべての便利な答えをupvoteすることを忘れないでください。他人の質問への回答を含める。あなた自身の質問に対する最良の答えを受け入れるかどうかを確認してください。 –

答えて

1

どのように見えるのは恐ろしい考えです。

Excelファイルの読み込みがうまくいきます。データを読み取るためのExcelの宝石があります。 roo gemはxlsx形式で利用できますが、私はそれをテストしていません。ユーザーにExcelを使ってファイルをxls形式で保存するように指示し、アップロードします。

(アプリのデベロッパーの視点から見ると)csvファイルをインポートすることさえ優れています。 csvの欠点は、ファイルにちょうど1つのテーブルだけが含まれていることです。

一方、Excelインポートの問題は、人々が複数のタブファイルをセルから値ではなく数式で提供できることです。したがって、十分なエラーチェックを必ず含めてください。

問題が頻繁に発生する:コードでDateオブジェクトが予想されるときに、Excelシートに文字列として日付を入力する人々。または、人々が文字列として入力した数字。コードでは、これらの問題をテストして処理する必要があります。

http://rubygems.org/gems/roo

日時を参照してください: "私にいくつかのコードを与える" - StackOverflowのがどのように機能するかそれはありません。うまくいけば、上記はあなたの旅のお手伝いをします。

+0

私はバックエンド、バックエンドを介してバックアップと復元のデータを必要とする、恐ろしいではありません。 –

+0

バックエンドのバックアップとリストアの方法については、レーキタスクをお勧めします。 SQL入力の場合は、[SQL execute method](http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html#method-i-execute)を使用して、 –

関連する問題