【发布时间】:2022-01-02 20:18:34
【问题描述】:
我有一个简单的 Rails 应用程序,它使用 ActiveStorage 将照片上传到对象。
class ProjectAsset < ApplicationRecord
belongs_to :project
belongs_to :user
has_one_attached :asset
has_many :comments, dependent: :delete_all
accepts_nested_attributes_for :comments
#DB columns => :project_id :asset :user_id
end
并将它们存储在 AWS S3 上:
test:
service: Disk
root: <%= Rails.root.join("tmp/storage") %>
local:
service: Disk
root: <%= Rails.root.join("storage") %>
amazon:
service: S3
access_key_id: ***
secret_access_key: ***
region: ***
bucket: ***
我有一个简单的表格:
<%= form_for ProjectAsset.new do |form| %>
<%= form.hidden_field :project_id, :value => @project.id %>
<%= form.hidden_field :user_id, :value => current_user.id %>
<%= form.file_field :asset, multiple: false, direct_upload: true, class: "", onchange: "autoUpload(this);" %>
<%= form.submit 'Add this Photo' %>
<% end %>
这会保存图像并自动重定向到适当的视图模板。
def create
@project_asset = ProjectAsset.new(project_asset_params)
respond_to do |format|
if @project_asset.save
format.html { redirect_to project_path(@project_asset.project), notice: "Project asset was successfully created." }
format.json { render :show, status: :created, location: @project_asset }
else
format.html { render :new, status: :unprocessable_entity }
format.json { render json: @project_asset.errors, status: :unprocessable_entity }
end
end
end
我的问题是这样的,它有点像两个部分。
- 如何将
:create上上传的图像 (:asset) 放在 Delayed::Job 队列中,然后保存其余记录并继续重定向? 和 - 重定向后,图像显示在视图模板上。如果有足够快的数据传输,这很好,但如果你在 wifi 之外,那就是一场噩梦。在资产完全上传到 S3 之前,如何将
storage中的用户本地图像用作图像?
【问题讨论】:
标签: ruby-on-rails delayed-job rails-activestorage