The guide说我可以将附件保存到光盘上,就像这样运行一个进程:
message.video.open do |file|
system '/path/to/virus/scanner', file.path
# ...
end
我的模型的附件定义为:
has_one_attached :zip
然后在我定义的模型中:
def process_zip
zip.open do |file|
# process the zip file
end
end
但是我收到了错误:
private method `open' called
zip.open调用上的。
如何在本地保存zip以进行处理?
答案 0 :(得分:5)
作为Rails 5.2的替代方案,您可以这样做:
def process_zip
# Download the zip file in temp dir
zip_path = "#{Dir.tmpdir}/#{zip.filename}"
File.open(zip_path, 'wb') do |file|
file.write(zip.download)
end
Zip::File.open(zip_path) do |zip_file|
# process the zip file
# ...
puts "processing file #{zip_file}"
end
end
答案 1 :(得分:1)
这是一个边缘指南(注意URL中的edgeguides.rubyonrails.org
);它适用于GitHub上rails/rails存储库的主分支。主要的最新更改尚未包含在已发布的Rails版本中。
您可能正在使用Rails 5.2。使用边缘Rails来利用ActiveStorage::Blob#open
:
gem "rails", github: "rails/rails"