在Rails中上传CSV文件并处理记录以在页面上显示而不保存文件?

时间:2013-01-06 23:18:03

标签: ruby-on-rails ruby ruby-on-rails-3 paperclip

我正在学习Rails,我正在尝试创建一个文件上传页面来处理CSV数据而不使用我的数据库或模型。我也试图避免使用任何宝石,如Paperclip或Carrier-wave。

我取得了一些进展,但由于某种原因,我的代码无效。我没有收到import.html.erb page.

上显示的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>

1 个答案:

答案 0 :(得分:10)

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 %>

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