【问题标题】:undefined method `path' csv.read未定义的方法“路径”csv.read
【发布时间】:2014-11-11 15:14:18
【问题描述】:

我试图从 form_tag 读取 csv 文件,但是当使用 csv.read(file.path) 打开文件时抛出错误“未定义的方法 `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

【问题讨论】:

    标签: csv methods path


    【解决方案1】:

    这是因为根据您尝试上传的 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。

    【讨论】:

    • 好的,但是当我这样做时会抛出此错误“第 1 行中的引号丢失或杂散” -> @rowarraydisp = CSV.parse(csv_text, :headers => true)
    • ty :) 只是我的 file.csv 的形式,会引发错误
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 2016-07-03
    • 2016-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 2020-05-05
    相关资源
    最近更新 更多