我正在尝试保存文件,以便我可以使用CarrierWave将其上传到条带,但我收到错误:
ERROR: value too long for type character varying(255)
并且不明白为什么我遵循GitHub上的CarrierWave使用指南。
这是我的申请:
class SplitterStripeServer < Sinatra::Base
CarrierWave.configure do |config|
config.root = File.dirname(__FILE__) + "/public"
end
post "/" do
img = Image.new
img.file = params[:file] #carrierwave will upload the file automatically
img.save!
redirect to("/")
end
get "/upload" do
erb :upload
end
get "/" do
@image = Image.find(1)
erb :index
end
end
这是上传者:
class ImagesUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
end
这是模型:
class Image
include DataMapper::Resource
property :id, Serial
mount_uploader :file, ImagesUploader
end
我觉得我错过了一些简单的事情。
答案 0 :(得分:0)
您需要减少文件名的长度。覆盖filename
方法并剪切文件的基本名称,例如到250个字符。
class ImagesUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
storage :file
def filename
"#{file.basename[0..250]}.#{file.extension}" if original_filename.present?
end
end
答案 1 :(得分:0)
检查您是否安装了额外的 gems
我已经安装了 gem validates_lengths_from_database
并且这个 gem 不知道如何使用carrierwave。我只是在模型 validates_lengths_from_database except: %i[file]