首页 > 解决方案 > Carrierwave 不在 Rails 5 中保存图像

问题描述

我最近在一个项目中实现了 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 .images 的(失败的)byebug 输出:

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

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

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

解决方案


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


推荐阅读