ruby-on-rails - 在 Rails 中上传 CSV 文件并处理记录以在不保存文件的情况下显示在页面上?

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

我正在学习 Rails,并尝试创建一个文件上传页面来处理 CSV 数据,而无需使用我的数据库或模型。我还尽量避免使用任何 gem,例如 Paperclip 或 Carrier-wave。

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

当我单击页面上的上传按钮:localhost:3000/upload 时,它会在提交后正确地将我重定向到预期的页面,但文件中的行不会出现。

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

上传文件 View (index.html.erb):

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

Controller (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

结果 View (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 文件向浏览器发送一个子数组 row,但是,不知道 ERB 或数据是什么,很难说除了一行数据的内容。

关于ruby-on-rails - 在 Rails 中上传 CSV 文件并处理记录以在不保存文件的情况下显示在页面上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14187859/

相关文章:

ruby-on-rails - to_json 中的 Rails 自定义字段

ruby-on-rails - 在delayed_job中,当Delayed::Worker.delay_jobs为假时是否会调用钩子(Hook)?

Ruby - 将多行字符串居中

ruby - Padrino Controller 抽象

ruby - Bundler 通过 RVM 提供什么?

ruby-on-rails-3 - 除非被触摸,否则 ActiveRecord::Base.send(:descendants) 不会返回所有模型

ruby-on-rails - send_file pdf时将浏览器标签标题更改为文件名

ruby-on-rails - Rails3 - oauth 插件问题

ruby - ruby 中串联类型之间的区别

ruby-on-rails - Rails Devise Invitable 发送邀请后重定向