0

csvファイルをMySqlデータベースにインポートするタスクを行いました。しかし、私の要件は次のとおりです。 1. csv ファイルの行と列は、MySql データベースの行と列と一致する必要があります。行または列が欠落している場合は、「Missing @row1 or column 2」というエラーが発生するはずです.. 2私のコードでは、テーブルヘッダー、つまり名前、場所、都市など。多くの場合、見出しはすべてのインポートで繰り返されます。

次のように私のコード:

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 -%>

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

4

1 に答える 1

-1

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

OK、苦情は完了しました。私のソリューションを共有させてください:

  1. JavaScriptを介して。私はこの方法で実装していませんが、私が行ったことを比較すると、この方法が好きです。手順は次のとおりです。

    1. ローカル csv ファイルを読み取ります (負荷テスト フィクスチャに対する jasmine のアプローチを参照してください)。
    2. csv とデータベース テーブルの間の列を検証します。
    3. 結果を表示します。パスしない場合は、ユーザーに警告メッセージを表示します。
  2. リモートで ruby​​ コードを介して: 私はこの方法でそれを行いましたが、あまり良くないことがわかりました (おそらく、多くの js 関数を使用しました....汚い、洗練されていない、テストが難しい、応答が遅い、ajax... など)その場合は、「ダイアログ」や「モーダル ウィンドウ」ではなく、プレーンな HTML ページを使用してください。

    1. ファイルをリモートサーバーに更新します。
    2. リモート サーバーで csv ファイルを検証します。
    3. 検証が失敗した場合、ユーザーに警告メッセージを表示します。
于 2012-04-13T07:34:25.033 に答える