ruby-on-rails - 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 ...>>>]
>
如果有人知道为什么会发生这种情况,我将不胜感激!
解决方案
所以,事实证明我没有在我的表单标签中将enctype设置为multipart(通过表单上传文件是必需的)。更改以解决问题。<%= form_for @question do |f| %>
<%= form_for @question, html: {multipart: true} do |f| %>
推荐阅读
- laravel - PostgreSQL 中的纬度和经度必须使用哪种数据类型?
- java - Selenium div 下拉列表 - 元素不可见
- bluetooth-lowenergy - 使用 iBeacon 协议时,有什么方法可以获得信标电池寿命吗?
- objective-c - 方法在框架中折旧,但无法应用建议的更改
- git - 如何理解 Git Stage 是 Git 中最重要的概念之一?
- c# - RegAsm.exe 遇到问题
- c# - 在 C# 中异步使用 Web API
- ios - 添加启动屏幕图像,而不是使用 iOS 的 LaunchScreens.storyboard
- node.js - 具有特定端口的 Mongo 服务暴露在桥接网络 docker 中
- android - 使用 cURL 发送 FCM 消息,推荐使用哪个 api?