我正在学习Rails,并尝试创建一个文件上传页面来处理CSV数据,而无需使用我的数据库或模型.我也试图避免使用诸如Paperclip或Carrier-wave之类的任何宝石.
@H_403_2@我已经取得了一些进展,但由于某种原因,我的代码不起作用.我没有收到显示在import.html.erb页面上的CSV文件中的记录.
@H_403_2@当我点击我的页面上的上传按钮:localhost:3000 / upload,它会在提交后正确地将我重定向到预期页面,但是文件中的行不会显示.
@H_403_2@有没有人知道为什么页面不显示CSV文件中的记录?
@H_403_2@上传文件视图(index.html.erb):
<%= form_tag({:action => :import},multipart: true) do %> <%= file_field_tag :file %> <%= submit_tag( "Import" ) %> <% end %>@H_403_2@控制器(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@H_403_2@结果视图(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@H_403_2@应写成:
@rowarraydisp = CSV.read(myfile.path)@H_403_2@根据CSV.read的文档:
@H_403_2@Use to slurp a CSV file into an Array of Arrays.@H_403_2@您的import.html.erb文件使用两次,您的ERB的两个不同示例.实际文件是什么,实际代码?
<% @rowarraydisp.each do |row| %> <%= row %> <% end %>@H_403_2@将尝试将一个子数组行从CSV文件发送到浏览器,但是,不知道ERB或数据是什么,很难说输出将不是一行数据的内容.