2012-04-13 18 views
0

私はcsvファイルをMySqlデータベースにインポートする作業を行いました。しかし、今私の要件は次のとおりです: 1. csvファイルの行と列は、行や列が見つからない場合に "Missing @ row1 or column 2"というようなMySqlデータベースの行と列と一致する必要があります。 2.私のコードでは、テーブルのヘッダ、すなわち名前、場所、都市など。見出しは、たびに毎回繰り返されます。mysqlデータベースフィールドと一致するcsvファイルの行と列の検証

私のコードを次のようにビューで

def load_csv 

end 

def import_csv 
csv=params[:file].read 
n=0 
parsed_file = CSV.parse(csv) 
parsed_file.each do |row| 
i=User.new 
i.name = row[0] 
i.location = row[1] 
i.city = row[2] 
if i.valid? 
i.save 
n=n+1 
GC.start if n%50==0 
flash[:notice] = "CSV Imported Successfully, with #{n} records"         
end 
end 

<%= form_for(:user, :url => import_csv_user_path, :html => {:multipart => true}) do |f| %> 
<table> 
<tr> 
<td> 
<label for="dump_file"> 
Select a CSV File : 
</label> 
</td> 
<td ><%= file_field_tag :file -%></td> 
</tr> 
<tr> 
<td colspan='2'><%= submit_tag 'Submit' -%></td> 
</tr> 
</table> 
<% end -%> 

が私を助けてください......

+0

このコードは、空のload_csvメソッドですか? – Ernest

答えて

-1

私はあなたの現在のものと同じ仕事をしています。しかし、私はこれを行うには非常に良い/ストレートフォワード/簡潔/エレガントなソリューションだとは思わない、これは(CSVファイルを検証する)非常に良い要件ではない、それはデータベースの "バージョン管理"モデル。特に、専門家ではない人々のために、すべてのコードを混乱させる可能性があります。

OK、苦情しました。私の解決策を教えてください:

  1. via javascript私はこのように実装していませんが、私が行ったことを比較すると、私はこの方法を好む。ステップは、

    1. ローカルのcsvファイルを読み込みます(ジャスミンのロードテストフィクスチャの方法を参照してください)。
    2. csvとデータベーステーブルの間の列を検証します。
    3. 結果を表示します。合格でない場合は、ユーザーに警告メッセージを出します。リモートでのRubyのコードを経由して
  2. :私は、このような方法でそれをやった、と応答に遅い、テストするのは難しい、エレガントではない、汚い....多分私は多くのJS関数を使用(それは非常に良好でないことが判明ajax ... etc)これを行う場合は、単に "ダイアログ"や "モーダルウィンドウ"ではなく、プレーンなHTMLページを使用してください。

    1. ファイルをリモートサーバーに更新します。
    2. リモートサーバーのcsvファイルを検証します。
    3. 検証に失敗した場合、ユーザーに警告メッセージを表示します。
+0

OK。あなたが言ったのは、私が行ったコーディングが私の要求に合っていないということです。私はRuby on Railsを初めて使っています。興味深いリンクを提供したり、コードを修正する方法を教えてください。 – user1326616

関連する問題