CSV-Mapper没有这样的文件或目录

时间:2010-10-01 00:10:28

标签: ruby-on-rails ruby csv fastercsv

我正在使用csv-mapper gem导入csv文件。当我在脚本/控制台中的README(http://github.com/pillowfactory/csv-mapper)中使用示例代码时,它工作得很好。但是,当我创建一个Web表单并使用它来上传一个csv文件时,我收到错误“没有这样的文件或目录 - test.csv

这些是参数: 参数:

{ “转储”=> { “文件”=>#},  “提交”=> “中提交”,  “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

2 个答案:

答案 0 :(得分:4)

这有点晚了,但你还应该注意,当你传递它时,CsvMapper #import会占用任何IO:type => :io选项。

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

这将允许您在导入之前跳过保存文件的步骤。

答案 1 :(得分:2)

错误是预期的,因为params[:dump][:file].original_filename仅返回上传的CSV的文件名。上传的CSV应首先保存到文件系统。将保存的CSV文件的路径传递给CsvMapper#import方法然后它应该可以工作。

有关如何保存上传文件的信息,请参阅here