首页 > 解决方案 > 通过在 Rails 上使用 simple_form_for 的独特输入将文件(图像、视频、音频、文本......)上传到 Cloudinary 的正确方法是什么?

问题描述

我正在尝试在我的 Rails 应用程序中实现一个 simple_form_for,以在 ruby​​ 模型上附加许多文件。我想上传几种类型的文件(图像、PDF、视频、音频、.doc、...)。我使用 ruby​​ gem Cloudinary(带有免费帐户)将文件存储在云中,并使用 Active Storage 将文件与模型实例链接起来。我使用 Rails 5.2.4.1 和 Ruby 2.6.5(见下面我的实际代码)

这是我的模型文件:

class Substep < ApplicationRecord
 has_many_attached :documents
end

强大的参数控制器:

class SubstepsController < ApplicationController
 [...]
 private
 
 def substep_params
  params.require(:substep).permit(documents: [])
 end
end

宝石文件.rb:

gem 'cloudinary', '~> 1.12.0'
gem 'simple_form'

我在 .env 文件中的 API 密钥:

CLOUDINARY_URL=............

配置/存储.yml:

cloudinary:
  service: Cloudinary

配置/环境/development.rb:

config.active_storage.service = :cloudinary

app/views/substeps/_form.html.erb :

<%= simple_form_for(@substep) do |f| %>
 <%= f.input :documents, as: :file, input_html: { multiple: true }, label: "Select files" %>
 <%= f.submit "Send documents" %>
<% end %>

通过此设置,我可以轻松管理图像和 PDF 文件。

但是,我已阅读 Cloudinary 文档 ( https://cloudinary.com/documentation/rails_integration ) 和 simple_form_for 文档 ( https://github.com/heartcombo/simple_form ) 以找到管理视频、音频和文本文件的正确方法使用相同的设置,但到目前为止我失败了。

我在 Cloudinary 文档中发现我们可以使用选项“ :resource_type => :auto ”来自动管理不同类型的文件。我已经尝试了几种配置,但都没有给出任何结果。

<%= f.input :documents, as: :file, input_html: { multiple: true, resource_type: :auto },... %>
<%= f.input :documents, as: :file, input_html: { multiple: true }, resource_type: :auto,... %>

<%= f.input :documents, as: :file, input_html: { multiple: true, resource_type: "auto" },... %>
<%= f.input :documents, as: :file, input_html: { multiple: true }, resource_type: "auto",... %>

<%= simple_form_for(@substep, resource_type: :auto) do |f| %>
<%= simple_form_for(@substep), resource_type: :auto do |f| %>

我没有成功找到如何将此选项添加到我的 simple_form_for 输入。有人可以帮助我吗?

编辑 2020/07/13: 感谢另一个开发人员,我找到了解决方案。以下是他的回答。

“嗨!我刚遇到和你一样的问题,我的解决方案是更新 cloudinary gem。在以前的版本中,cloudinary gem 将“image”作为 resource_type 的默认值,看起来你无法通过活动存储传递该选项到阴天。

一旦我从 Gemfile 中删除了 '~> 1.12.0' 并将 gem 更新到版本 1.16,它就开始接受其他媒体类型的上传。可能 resource_type 选项更改为 auto 沿线某处。”

标签: htmlruby-on-railscloudinaryfile-typesimple-form-for

解决方案


推荐阅读