Почему мой загрузчик нескольких файлов (использующий Carrierwave и Cloudinary) нормально загружает файлы, но не прикрепляет все файлы к модели / таблице? - PullRequest
0 голосов
/ 21 декабря 2018

Я создаю рыночное веб-приложение, и для этого мне нужно несколько изображений продуктов для каждого продукта.

Я использую загрузчик Carrierwave и Cloudinary для управления изображениями, и, насколько я знаю, у меня естьсоблюдая документацию правильно.

Вот некоторые из ключей ...

Из схемы, создавая таблицу продуктов (я пробовал как с, так и без):

  create_table "products", force: :cascade do |t|
    (...)
    t.json "photos", default: []

В простой форме:

<%= 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, но только первое изображение из всех выбранных будет сохранено в экземпляре, а в строке - неожидаемый хэш / json.

Из консоли - до:

 photos: []>

И после:

 photos: "image/upload/v1545381249/fdw1ydn6d1latvtlbobr.jpg">

Я видел другие учебные пособия, которые имеют только поле изображениямассив и не JSON, но документ Carrierwaventation говорит, что нужно создать тип поля json.

1 Ответ

0 голосов
/ 21 декабря 2018

Надеюсь, это поможет вам. В вашей модели продукта:

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

Создайте еще один сценарий миграции:

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