我试图从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
答案 0 :(得分:0)
这是因为根据您尝试上传的CSV文件的大小,file
的类型可能是StringIO或TempFile个对象。所以你可能会采取适当的行动,取决于它是什么。有关说明,请参阅此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。