19

我正在学习 Rails,并试图创建一个文件上传页面来处理 CSV 数据,而不使用我的数据库或模型。我还试图避免使用任何宝石,例如回形针或载波波。

我取得了一些进展,但由于某种原因,我的代码无法正常工作。我没有得到 CSV 文件中显示的记录import.html.erb page.

当我单击页面上的上传按钮: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>
4

1 回答 1

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

应该写成:

@rowarraydisp = CSV.read(myfile.path)

根据以下文档CSV.read

用于将 CSV 文件转换为数组数组。

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

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

将尝试将 CSV 文件中的子数组发送row到浏览器,但是,如果不知道 ERB 或数据是什么,除了一行数据的内容之外,很难说输出将是什么。

于 2013-01-07T03:08:25.110 回答