Carrierwave не сохраняет изображение в Rails 5 - PullRequest
0 голосов
/ 21 февраля 2019

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

Обе таблицы моделей содержат столбец для «изображений» в схеме типа «текст».

Обе модели имеют следующие строки вверху:

mount_uploaders :images, ImageUploader
serialize :images, JSON

У меня есть закрытый метод в обоих контроллерах, разрешающий изображения:

def images_param
  params.require(:image_files).permit!
end

И я добавляю изображения вобъект в действии #update обоих контроллеров выглядит так:

object.images = images_param.values
object.save
byebug

Что меня смущает, так это то, что это хорошо работает для одной из моделей, но не работает для другой.Более того, когда я использую byebug для проверки объекта, работающая модель показывает изображения, добавленные к объекту, в то время как другая модель показывает изображения как «ноль».

Вот (работающий) вывод команды byebug для объекта 1 :

#<PageAppearance id: 10, images: ["image-1.png"]>

Вот (работающий) вывод команды byebug для объекта 1 .images:

[#<ImageUploader:0x00007f8bb5eb43d8 @model=#<PageAppearance id: 10, images: ["image-1.png"]>, @mounted_as=:images, @cache_id=nil, @filename="image-1.png", @original_filename="image-1.png", @file=#<CarrierWave::SanitizedFile:0x00007f8bb736d400 @file="/Users/agaus/environment/namc-portal_/public/uploads/page_appearance/images/10/image-1.png", @original_filename=nil, @content_type="image/png">, @cache_storage=#<CarrierWave::Storage::File:0x00007f8bb5eacd90 @uploader=#<ImageUploader:0x00007f8bb5eb43d8 ...>>, @versions={}, @storage=#<CarrierWave::Storage::File:0x00007f8bb1f8a888 @uploader=#<ImageUploader:0x00007f8bb5eb43d8 ...>>>]
> 

Вот выход (неудачный) бэга для объекта 2 :

#<Question id: 276, images: nil>

Вот выход (неудачный) бэга для объекта 2 .images:

[#<ImageUploader:0x00007f8bb80f7620 @model=#<Question id: 276, images: nil>, @mounted_as=:images, @storage=#<CarrierWave::Storage::File:0x00007f8bb80eb7d0 @uploader=#<ImageUploader:0x00007f8bb80f7620 ...>>>]
>

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

1 Ответ

0 голосов
/ 21 февраля 2019

Итак, оказалось, что у меня не было enctype , установленного на multipart в моем теге form (который необходим для загрузки файлов через формы).Изменение <%= form_for @question do |f| %> на <%= form_for @question, html: {multipart: true} do |f| %> устранило проблему.

...