载波未在Rails 5中保存图像

时间:2019-02-20 21:58:13

标签: ruby-on-rails ruby-on-rails-5 carrierwave

我最近在一个项目中实施了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”。

这是对象 1 的(有效)byebug输出:

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

这是对象 1 .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 ...>>>]
> 

这是对象 2 的(失败的)byebug输出:

#<Question id: 276, images: nil>

这是对象 2 。图像的(失败的)byebug输出:

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

如果有人知道为什么会发生这种情况,我将不胜感激!

1 个答案:

答案 0 :(得分:2)

因此,事实证明,我的 form 标记中没有将 enctype 设置为 multipart (通过表单上传文件时需要使用此代码) )。将<%= form_for @question do |f| %>更改为<%= form_for @question, html: {multipart: true} do |f| %>可以解决此问题。