未定义的方法`path' csv.read

时间:2014-11-11 15:14:19

标签: csv methods path

我试图从form_tag中读取csv文件,但是当用csv.read(file.path)打开文件时抛出错误“未定义的方法`路径”,有人知道如何修复它吗?

我在index.html.erb中的代码

    <%= form_tag("/main/import",method: "get",:multipart => true,name: "hola") do %>
    <%= file_field_tag :file %> 
    <%= submit_tag( "Import" ) %>
    <% end %>

在主控制器中

 def import
    @myfile = params[:file]
    @rowarraydisp = CSV.read(@myfile.path)

end

1 个答案:

答案 0 :(得分:0)

这是因为根据您尝试上传的CSV文件的大小,file的类型可能是StringIOTempFile个对象。所以你可能会采取适当的行动,取决于它是什么。有关说明,请参阅此answer。接下来,您的代码变为:

file_data = params[:file]
if file.respond_to?(:read)
  csv_text = file.read
elsif file.respond_to?(:path)
  csv_text = File.read(file.path)
else
  logger.error "Bad file_data: #{file.class.name}: #{file.inspect}"
end
@rowarraydisp = CSV.parse(csv_text, :headers => true)

此外,您已在form_tag中指定了GET方法,在您上传表单的情况下,您正在发布数据,因此我只是完全删除该方法或将该方法正确指定为post。