ruby-on-rails – 将Rails中的CSV文件和进程记录上传到页面上,不保存文件?

前端之家收集整理的这篇文章主要介绍了ruby-on-rails – 将Rails中的CSV文件和进程记录上传到页面上,不保存文件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在学习Rails,并尝试创建一个文件上传页面来处理CSV数据,而无需使用我的数据库或模型.我也试图避免使用诸如Paperclip或Carrier-wave之类的任何宝石.

我已经取得了一些进展,但由于某种原因,我的代码不起作用.我没有收到显示在import.html.erb页面上的CSV文件中的记录.

当我点击我的页面上的上传按钮:localhost:3000 / upload,它会在提交后正确地将我重定向到预期页面,但是文件中的行不会显示.

有没有人知道为什么页面不显示CSV文件中的记录?

上传文件视图(index.html.erb):

<%= form_tag({:action => :import},multipart: true) do %>
  <%= file_field_tag :file %>
  <%= submit_tag( "Import" ) %>
<% end %>

控制器(upload_controller.rb):

class UploadController < ApplicationController
  def index
  end

  def import
    rowarray = Array.new
    myfile = params[:file]

    CSV.foreach(myfile.path) do |row|
      rowarray << row
      @rowarraydisp = rowarray
    end
  end
end

结果视图(import.html.erb):

<% @rowarraydisp.each do |row| %>
  <%= row %>
<% end %>
<h1>File has been uploaded. Check</h1>

解决方法

CSV.foreach(myfile.path) do |row|
  rowarray << row
  @rowarraydisp = rowarray
end

应写成:

@rowarraydisp = CSV.read(myfile.path)

根据CSV.read的文档:

Use to slurp a CSV file into an Array of Arrays.

您的import.html.erb文件使用两次,您的ERB的两个不同示例.实际文件是什么,实际代码

<% @rowarraydisp.each do |row| %>
  <%= row %>
<% end %>

将尝试将一个子数组行从CSV文件发送到浏览器,但是,不知道ERB或数据是什么,很难说输出将不是一行数据的内容.

猜你在找的Ruby相关文章