为啥我的多文件上传器(使用 Carrierwave 和 Cloudinary)上传文件正常,但没有将所有文件附加到模型/表格?
Posted
技术标签:
【中文标题】为啥我的多文件上传器(使用 Carrierwave 和 Cloudinary)上传文件正常,但没有将所有文件附加到模型/表格?【英文标题】:Why is my multiple file uploader (using Carrierwave and Cloudinary) uploading the files ok but not attaching all the files to the model/table?为什么我的多文件上传器(使用 Carrierwave 和 Cloudinary)上传文件正常,但没有将所有文件附加到模型/表格? 【发布时间】:2019-05-21 19:14:56 【问题描述】:我正在构建一个市场网络应用程序,为此我需要每个产品多张产品图片。
我正在使用 Carrierwave 上传器和 Cloudinary 来管理图像,据我所知,我正确地遵循了文档。
这里有一些关键代码...
从架构中,创建产品表(我尝试了有无):
create_table "products", force: :cascade do |t|
(...)
t.json "photos", default: []
在 simple_form 中:
<%= f.file_field :photos, multiple: true %>
<%= f.input :photos_cache, as: :hidden %>
在产品模型中:
class Product < ApplicationRecord
mount_uploaders :photos, PhotoUploader
在照片上传器中
class PhotoUploader < CarrierWave::Uploader::Base
include Cloudinary::CarrierWave
end
在控制器中,强参数:
def new_product_params
params.require(:product).permit( (...) photos: [])
表单已发布并保存新实例,所有文件都已上传到 Cloudinary ok,但只有所有选定的第一个图像被保存到实例中,并且保存在一个字符串中 - 不是预期的 hash/json。
从控制台 - 之前:
photos: []>
之后:
photos: "image/upload/v1545381249/fdw1ydn6d1latvtlbobr.jpg">
我见过其他教程将图像字段仅作为数组而不是 json,但 Carrierwave 文档说要创建 json 字段类型。
【问题讨论】:
请在您的产品模式中显示mount_uploader
。
感谢您的关注,我已经用更多代码示例编辑了这个问题
@Killuh-B 你可以查看这个thread here。我认为这是一个多云的问题。
@Sovalina - 哎哟....这让我很受伤
即使图像保存完全没问题,它仍然是 Cloudinary 的问题吗?
【参考方案1】:
希望对你有帮助 在您的产品模型中:
...
mount_uploader :photos, PhotoUploader
serialize :photos, JSON
...
创建另一个迁移脚本:
def change
remove_column :products, :photos
add_column :products, :photos, :string, array: true, default: []
end
【讨论】:
以上是关于为啥我的多文件上传器(使用 Carrierwave 和 Cloudinary)上传文件正常,但没有将所有文件附加到模型/表格?的主要内容,如果未能解决你的问题,请参考以下文章
根据另一个模型的属性 - RAILS,为一个模型使用不同的CarrierWave上传器
Carrierwave、MiniMagick 和调整图像大小
Cloudinary::CarrierWave 如何在 Cloudinary 中选择上传文件夹