Ruby on Rails CSV上传和导入 - 文件名太长

时间:2013-09-04 17:45:20

标签: ruby-on-rails ruby csv

我想让管理员通过csv文件将联系人导入数据库。因此我使用ruby csv库和以下代码片段:

 if request.post? && params[:file].present?
     inputFile = params[:file].read
     CSV.foreach(inputFile) do |row|
         #save row here
     end
 end

但是在CSV.foreach(inputFile) do |row|中,我得到一个“Errno :: ENAMETOOLONG - 文件名太长” - 错误,错误消息显示它使用整个csv文件作为文件名。

有谁知道为什么会这样做?

BTW:csv文件使用','和'/ n'作为分隔符。

3 个答案:

答案 0 :(得分:10)

感谢其他答案的输入,我自己找到了解决方案。问题是.read将文件转换为包含内容的字符串,但CSV.foreach()需要文件名或路径。使用.path代替解决问题:

 if request.post? && params[:file].present?
     inputPath = params[:file].path
     CSV.foreach(inputPath) do |row|
         #save row here
     end
 end

答案 1 :(得分:1)

它可能与第2行的.read调用有关。不知何故,inputFile正在变成csv的内容,而不是文件本身的名称。这会让我相信你设置inputFile变量有问题。我的猜测是.read没有像你想象的那样工作。

答案 2 :(得分:0)

尝试从params获取值时删除.read。然后变量inputFile可以将文件路径传递给CSV.foreach