我正在构建一个市场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字段类型。
答案 0 :(得分:0)
希望这可以帮助您 在您的产品模型中:
...
mount_uploader :photos, PhotoUploader
serialize :photos, JSON
...
创建另一个迁移脚本:
def change
remove_column :products, :photos
add_column :products, :photos, :string, array: true, default: []
end