如何修复“类型字符变化的值太长(255)”错误

时间:2017-01-13 19:54:07

标签: ruby sinatra carrierwave datamapper

我正在尝试保存文件,以便我可以使用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

我觉得我错过了一些简单的事情。

2 个答案:

答案 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]

中关闭它