我正在学习 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/