首页 > 解决方案 > 如何创建 Rails 表单以批量创建记录,每个记录都包含直接上传到 S3 的 Active Storage 附件?

问题描述

我有一个 Ruby on Rails 应用程序,它允许使用 Active Storage 直接上传创建记录,如下所述:https ://edgeguides.rubyonrails.org/active_storage_overview.html#direct-uploads

一切正常。现在我想有一种方法来设置批处理记录创建也使用直接上传,但似乎无法找出最佳方法。

假设我有一个名为 HomeMovie 的模型,它具有各种属性和一个视频附件。我希望能够一个接一个地填写多个 HomeMovie 表单,单击提交一次,然后开始上传每个带有大附件的文件,然后就可以离开了。使用我目前的设置,一次做一个,使用这些大型附件需要太长时间,并且需要不断的保姆。任何帮助是极大的赞赏。

我正在使用 Rails 5.2.3

标签: ruby-on-railsrails-activestorage

解决方案


使用 Sidekiq 设置某种微服务/作业,让您基本上可以将视频作为单独的作业进行排队,怎么样?

本质上,您的逻辑将排队异步作业以处理附件;那么这只是正确设置循环的问题。

循环示例

def bulk_insert(videos) #with videos being an array or collection
  videos.each do |vid|
   #do whatever processing and record creation, then
   VideoProcessJob.perform_async(vid["attachment_key"])
  end
end

工作示例

class VideoProcessJob(video_attachment)
  #assumes a service/module for processing the videos
  VideoProcessor.new(video_attachment).process_video_attachment_logic
end

推荐阅读