html - 通过在 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 沿线某处。”
解决方案
推荐阅读
- html - 来自其他网站的图片 URL 未加载
- php - Symfony 控制台到 cron 或任务计划与任务运行器相结合
- ecmascript-6 - 为什么 Boolean.prototype 又是一个布尔对象?(对于字符串和数字也是如此,但不是日期或正则表达式?)
- ckeditor - 从 TYPO3 7.6 中的rtehtmlarea 迁移到 8.7 中的 rte_ckeditor使所有预先存在和成为
- javascript - Vue.js - 仅显示错误的数组元素
- google-identity - Yolo API 访问请求的大约周转时间是多少?
- python - 在源代码中开启/关闭测试
- ruby-on-rails - 在 Rails 中调用方法的最佳方法
- c - 将 Swift 字符串数组分配给采用 char ** 值的 C 结构变量
- python - 是否可以在不使用底层源代码的情况下在 Python 中包装 C++ DLL?