Carrierwave在Rails中不保存图像5

问题描述 投票:2回答:1

我最近在一个项目中实现了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检查对象时,工作的模型显示添加到对象的图像,而另一个模型显示图像为'nil'。

这是object1的(工作)byebug输出:

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

这是object1.images的(工作)byebug输出:

[#<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 ...>>>]
> 

这是object2的(失败的)byebug输出:

#<Question id: 276, images: nil>

这是object2.images的(失败的)byebug输出:

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

如果有人知道为什么会这样,我会非常感激!

ruby-on-rails ruby-on-rails-5 carrierwave
1个回答
2
投票

所以,事实证明我没有在我的表单标签中设置为multipart的enctype(这是通过表单上传文件所必需的)。将<%= form_for @question do |f| %>改为<%= form_for @question, html: {multipart: true} do |f| %>解决了这个问题。

© www.soinside.com 2019 - 2024. All rights reserved.