我有一个模型,其中包含一个使用ActiveStorage的附件:
class ProofreadDocument < ApplicationRecord
has_one_attached :file
end
我正在处理一项将文件附加到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实例。我该怎么做?
我通过将输入流包装在 StringIO 对象中而成功,如下所示:
self.file.attach(io: StringIO.new(zip_entry.get_input_stream.read), filename: zip_entry.name, content_type: MS_WORD_CONTENT_TYPE)