Как я могу использовать rubyzip для прикрепления файлов в zip-архиве к объекту ActiveStorage Rails 5 - PullRequest
0 голосов
/ 02 октября 2018

У меня есть модель с одним вложением, которая использует ActiveStorage:

class ProofreadDocument < ApplicationRecord

  has_one_attached :file

end

Я работаю над задачей rake, чтобы прикрепить файлы к proofread_document.Файлы сжимаются в zip-архив.

Я понимаю, что я могу прикрепить файлы следующим образом из чтения документов ActiveStorage:

@proofread_document.file.attach(io: File.open('/path/to/file'), filename: 'file.pdf')

У меня есть следующее в моей задаче граблей:

    Zip::File.open(args.path_to_directory) do |zipfile|
          zipfile.each do |file|
            proofread_document = ProofreadDocument.new()
            proofread_document.file.attach(io: file.get_input_stream.read, filename: file.name)
            proofread_document.save
          end
     end

Это приводит к следующей ошибке:

NoMethodError: undefined method `read' for #<String:0x007f8d894d95e0>

Мне нужно прочитать содержимое каждого файла по одному, чтобы прикрепить его к экземпляру proofread_document.Как я могу это сделать?

1 Ответ

0 голосов
/ 12 октября 2018

Мне удалось добиться успеха, обернув входной поток в объект StringIO следующим образом:

self.file.attach(io: StringIO.new(zip_entry.get_input_stream.read), filename: zip_entry.name, content_type: MS_WORD_CONTENT_TYPE)
...