为什么我的多文件上传器(使用Carrierwave和Cloudinary)可以正常上传文件,但不能将所有文件都附加到模型/表中?

时间:2018-12-21 10:01:31

标签: ruby-on-rails image carrierwave cloudinary

我正在构建一个市场Web应用程序,因此每个产品需要多个产品图片。

我正在使用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

在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">

我看过其他教程,其中将image字段仅作为数组而不是json,但Carrierwave文档说要创建json字段类型。

1 个答案:

答案 0 :(得分:0)

希望这可以帮助您 在您的产品模型中:

...
mount_uploader :photos, PhotoUploader
serialize :photos, JSON
...

创建另一个迁移脚本:

def change
    remove_column :products, :photos
    add_column :products, :photos, :string, array: true, default: []
end