Загрузить CSV файл в Rails и записи процессов для отображения на странице без сохранения файла?
Я участвую в процессе обучения Rails и пытаюсь создать страницу загрузки файлов для обработки CSV-данных без использования моей базы данных или модели. Я также стараюсь избегать использования каких-либо драгоценных камней, таких как Paperclip или Carrier-wave.
Я сделал некоторый прогресс, но по какой-то причине мой код не работает. Я не получаю записи, которые находятся в файле CSV, отображаемом на 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>
Ответы
Ответ 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 %>
попытается отправить суб-массив row
из файла CSV в браузер, но, без представления о том, что этот ERB или данные трудно сказать, какой результат будет отличаться от содержимого строки данных.