2010-10-01 31 views
0

我正在使用csv-mapper gem导入一个csv文件。当我在脚本/控制台的自述文​​件(http://github.com/pillowfactory/csv-mapper)中使用示例代码时,它的效果很好。然而,当我创建了一个Web表单,并用它来上传CSV文件出现错误“没有这样的文件或目录 - test.csvCSV-Mapper没有这样的文件或目录

这些参数: 参数:

{”倾销” => { “文件”=>#}, “提交”=> “提交”, “authenticity_token”=> “血红蛋白+ 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

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

请参阅here了解如何保存上传的文件。

4

这有点迟了,但你也应该注意到,当你传递:type =>:io选项时,CsvMapper#import会接受任何IO。

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

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

相关问题