0

csv-mapper gem を使用して csv ファイルをインポートしています。script/console でREADME ( http://github.com/pillowfactory/csv-mapper ) のサンプル コードを使用すると、うまく機能します。ただし、Web フォームを作成し、それを使用して csv ファイルをアップロードすると、「そのようなファイルまたはディレクトリはありません - test.csv」というエラーが表示されます。

パラメータは次のとおりです。 パラメータ:

{"dump"=>{"file"=>#}, "commit"=>"Submit", "authenticity_token"=>"Hb+XDPUGyZQqB5H2vZnhlfXpEE9bAE16kAjTT34uQ3U="}

コントローラーのコードには次のものがあります。

def csv_import
  results = CsvMapper.import(params[:dump][:file].original_filename) do
    map_to Sale # Map to the Sale ActiveRecord class instead of the default Struct.
    after_row lambda{|row, sale| sale.save }  # Call this lambda and save each record after it's parsed.

    start_at_row 1
    [start_date, country]
  end
  flash[:notice] = "Successfully uploaded file"
end
4

2 に答える 2

4

これは少し遅れていますが、:type => :io オプションを渡すと、CsvMapper#import がすべての IO を取得することにも注意してください。

results = CsvMapper.import(params[:dump][:file], :type => :io) do ... end

これにより、インポート前にファイルを保存する手順をスキップできます。

于 2011-01-05T03:20:21.807 に答える
2

params[:dump][:file].original_filenameアップロードされたCSVのファイル名のみが返されるため、エラーが予想されます。アップロードしたCSVは、最初にファイルシステムに保存する必要があります。保存されたCSVファイルへのパスをCsvMapper#importメソッドに渡すと、機能するはずです。

アップロードしたファイルを保存する方法については、こちらをご覧ください。

于 2010-10-01T11:56:03.423 に答える