我正尝试使用Carrierwave将多个文件上传到名为Post
的json属性为images
的记录。但是当我尝试保存记录时,出现此错误:
(0.5ms) ROLLBACK
Completed 401 Unauthorized in 15ms (ActiveRecord: 0.8ms)
Encoding::UndefinedConversionError ("\xFF" from ASCII-8BIT to UTF-8):
我以前使用过Carrierwave,但从未遇到此错误。之前,我检查了是否有人遇到过这个问题,但没有发现太多。 This question建议使用activesupport-json_encoder
宝石,但该宝石与Rails 5不兼容。还建议使用force_encoding
方法并在保存文件时使用“ wb”标志,但是载波代码没有实现这些建议的地方。
这是我的代码:
表格
<%= form_for @post, :html => {multipart: true}, do |f| %>
<%= f.file_field :images, multiple: true %>
<%= f.submit "submit" %>
<% end %>
帖子控制器
...
private
def post_params
params.require(:post).permit({images: []})
end
end
发布迁移
...
create_table :posts do |t|
t.json :images
...
帖子上传者
class ImageUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :fog
def fix_exif_rotation
manipulate! do |img|
img.tap(&:auto_orient)
end
end
process :fix_exif_rotation
process :resize_to_fit => [800, 56000]
version :thumb do
process resize_to_fit: [300, 56000]
end
end
答案 0 :(得分:2)
我的猜测是,您需要在:string
中使用:json
而不是ActiveRecord::Migration
。
class AddImagesToGallery < ActiveRecord::Migration
def change
add_column :galleries, :images, :string, array: true, default: [] # add images column as array
end
end
您可以查看以下方法:Add more files and remove single file when using default multiple file uploads feature,以了解更多信息。
编辑-添加了原因
出现此错误的原因是,activesupport-json_encoder
宝石(2014年就悬挂在那里)已不再维护,并且与rails 5.x不兼容。