【发布时间】:2018-10-15 11:36:08
【问题描述】:
我最近使用 ActiveStorage,我想知道是否有一种方法可以一次下载所有附件。例如我有一个帖子,里面有很多照片,用户可以下载所有附加到这个帖子的照片。
【问题讨论】:
标签: ruby-on-rails-5 rails-activestorage
我最近使用 ActiveStorage,我想知道是否有一种方法可以一次下载所有附件。例如我有一个帖子,里面有很多照片,用户可以下载所有附加到这个帖子的照片。
【问题讨论】:
标签: ruby-on-rails-5 rails-activestorage
您可以通过递归 + ActiveStorage::Blob#open 来实现这一点
https://api.rubyonrails.org/v6.0.2.1/classes/ActiveStorage/Blob.html#method-i-open
示例代码:
def download_all(attachments, files = [], &block)
if attachments.empty?
yield files
return
end
attachments.first.open do |file|
files << file
method(__method__)[attachments[1, attachments.length - 1], files, &block]
end
end
用法:
download_all(record.attachments) do |files|
pp files
end
请注意,文件将在块终止后自动删除,您必须处理块内的所有文件。
【讨论】:
将所有附加的照片下载到 ZIP 文件中的帖子中,如下所示:
def download_zip
send_zip Post.photos
end
你必须使用以下 gem
gem 'active_storage-send_zip'
不要忘记添加到您的控制器:
include ActiveStorage::SendZip
【讨论】: