0

我正在使用 csv-mapper gem 导入 csv 文件。当我在脚本/控制台中的自述文件(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 回答