为啥我的多文件上传器(使用 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)上传文件正常,但没有将所有文件附加到模型/表格?的主要内容,如果未能解决你的问题,请参考以下文章

使用Carrierwave上传器测试模型

根据另一个模型的属性 - RAILS,为一个模型使用不同的CarrierWave上传器

Carrierwave、MiniMagick 和调整图像大小

Cloudinary::CarrierWave 如何在 Cloudinary 中选择上传文件夹

如何将已存储在 s3 上的文件添加到由同一数据存储支持的carrierwave?

Rails 4使用carrierwave上传多个图像或文件