Как экспортировать данные активной записи в файл Excel и сохранить файл xlsx в корзину Amazon S3, не сохраняя их на локальном компьютере, используя ruby на рельсах - PullRequest
0 голосов
/ 30 апреля 2020

В нашем проекте rails 6 я хочу экспортировать данные активной записи в файл Excel и сохранить файл xls в корзину S3 без сохранения данных xls на локальном БД, отправить ссылку на файл по электронной почте и предоставить функцию загрузки xls из электронной почты. Пожалуйста, помогите мне.

1 Ответ

0 голосов
/ 30 апреля 2020

1. Создайте модель, которая содержит экспортированный файл

# app/models/csv_export.rb

class CsvExport < ApplicationRecord
  has_one_attached :file
  # ...
end

. Настройте ActiveStorage, чтобы он использовал S3 в качестве поставщика. См. https://medium.com/alturasoluciones/setting-up-rails-5-active-storage-with-amazon-s3-3d158cf021ff

2. Создайте задание на экспорт, которое создает новый CsvExport с данными

# app/jobs/csv_export_job.rb
require 'csv'

class CsvExportJob < ApplicationJob
  queue_as :default

  def perform(csv_export_id)
    csv_export = CsvExport.find_by(id: csv_export_id)
    csv_export.file.attach \
      io: StringIO.new(csv_string), # add csv_string call here
      filename: filename
    # ...
  end

  private

  # ...

  CSV_COLUMNS = %w[id name email].freeze

  def csv_string
    CSV.generate(headers: true) do |csv|
      csv << CSV_COLUMNS
      # or whatever data you want to export
      User.all.each do |contact|
        csv << CSV_COLUMNS.map { |col| contact.send(col) }
      end
    end
  end
end

3. Триггерное задание

например, из действия контроллера

csv_export = CsvExport.create(status: :started)
CsvExportJob.perform_later csv_export.id

Я надеюсь, что эти примеры приведут вас в правильном направлении. Если вам нужна подробная помощь, вы можете посмотреть эту статью https://railsbyexample.com/export-records-to-csv-files-using-activestorage/

...