Подтвердить что ты не робот

Загрузить 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>
4b9b3361

Ответ 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 или данные трудно сказать, какой результат будет отличаться от содержимого строки данных.