我正在使用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
答案 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。