API rails App импорт CSV в базу данных через REST

Использование Postman для загрузки в почтовый путь в приложении rails (только api), однако не уверен, как разобрать его в приложение rails.

У нас есть модель для импорта таблицы с помощью метода импорта, который берет CSV и петляет, чтобы добавить его в БД.

однако не уверен, как взять файл через сообщение в контроллере с помощью params [], так как мы публикуем его как двоичный (мы пробовали путь формы в Postman тоже не очень удачно).

У меня в контроллере


file = CSV.read(params[:file].path)

однако это делает массив, который я не совсем знаю, как подать в модель (есть заголовки в исходном CSV-файле тоже)

2 ответа

  1. Как насчет того, что вы можете загрузить свой csv в S3 или Dropbox, а затем просто разместить url на сервере, сервер читает этот CSV и импортирует в БД.

    Вот пример чтения CSV из URL:

    app/услуги / process_csv.рубидий

    require 'csv'
    require 'net/http'
    
    class ProcessCsv    
      def initialize(csv_url)
        @csv_url = csv_url
      end
    
      def proesss
        uri = URI(@csv_url)
        csv_text = Net::HTTP.get(uri)
        csv = CSV.parse(csv_text, headers: true)
        csv.each do |row|
          # Process row here and import to DB here
        end
      end
    end
    

    Тогда вы можете использовать ProcessCsvв контроллере, params вашего контроллера — это просто URL-адрес файла CSV, а не данные CSV!

  2. Вы можете анализировать CSVс помощью foreach. Например, что-то вроде приведенного ниже.

    CSV.foreach(params[:file].path, headers: false) do |row|
      Model.create(name: row[0], email: row[1])
    end