我正在学习Rails,我正在尝试创建一个文件上传页面来处理CSV数据而不使用我的数据库或模型。我也试图避免使用任何宝石,如Paperclip或Carrier-wave。
我取得了一些进展,但由于某种原因,我的代码无效。我没有收到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>
答案 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 %>
将尝试将CSV文件中的子数组row
发送到浏览器,但是,如果不知道ERB或数据是什么,则很难说除了内容之外的输出是什么一行数据。