【问题标题】:Upload CSV file in Rails and process records to display on page without saving file?在Rails中上传CSV文件并处理记录以显示在页面上而不保存文件?
【发布时间】:2012-12-20 16:54:49
【问题描述】:

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

我取得了一些进展,但由于某种原因,我的代码无法正常工作。我没有得到 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>

【问题讨论】:

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


    【解决方案1】:
    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 或数据是什么,除了一行的内容之外,很难说输出将是什么数据。

    【讨论】:

    • 谢谢。这就是打印到 import.html 页面的内容! ["firstcol", "secondcol"] ["1", "2"] ["3", "4"] ["5", "6"] 文件已上传。检查
    猜你喜欢
    • 2020-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2018-02-09
    相关资源
    最近更新 更多