ruby-on-rails Rails ActiveStorage -无模型

ddrv8njm  于 2023-05-30  发布在  Ruby
关注(0)|答案(1)|浏览(205)

我有一个功能,用户上传一个XML文件,系统应该读取文件和导入数据。因此,该文件未附加到任何模型记录。所以我有一个允许文件输入的表单

<%= form_with(
    multipart: true,
    scope: :ctf,
    url:some_path,
    id: dom_id(Import.new, :form),
    data: { turbo: false }
  ) do |form| %>
  <%= render Content::SectionComponent.new do |section| %>
      <span class="text-sm"><%= 'Upload XML' %></span>

        <%= form.label :cf_file, 'File' %>

        <%= form.file_field :cf_file, accept: 'application/xml', required: true %>
  <% end %>
<% end %>

在控制器中,我将文件作为参数获取,并使用ActiveStorage::Blob手动上传。

def cf_upload
      importer = Import.new(cf_upload_params)
      if importer.valid?
        file_storage = ActiveStorage::Blob.create_and_upload!(io: cf_upload_params[:cf_file], filename: filename)
        Importers::Cf::ImportJob.perform_later(file_storage)
      else
        flash.now[:alert] = 'Something went wrong'
      end
      render :index
    end

有没有什么方法可以使用ActiveStorage direct_upload来代替使用ActiveStorage::Blob.create_and_upload进行上传?

1sbrub3j

1sbrub3j1#

根据the docsActiveStorage::Blob是一个数据库记录,它是根据ActiveRecord模型设计的。
一个可能可行的选择是使用直接上传,它基本上允许您设置一些JS,以便将文件直接上传到您的存储服务(例如表单提交的是一个令牌,或者是上传文件的标识符。但是这个解决方案也是建立在假设ActiveStorage::Blob被创建的基础上的。所以你可能需要黑进去。
但是如果你问--你能创建一个blob并将其上传到服务而不将其附加到任何其他模型上吗--绝对可以。未连接的斑点是一件事,这就是为什么医生正在解释如何清除他们,如果你想清理房子。

相关问题