Ruby 如何解决“问题”;值太长,无法更改类型字符(255)";错误

Ruby 如何解决“问题”;值太长,无法更改类型字符(255)";错误,ruby,sinatra,carrierwave,datamapper,Ruby,Sinatra,Carrierwave,Datamapper,我正在尝试保存一个文件,以便使用CarrierWave将其上载到stripe,但出现错误: ERROR: value too long for type character varying(255) 我不明白为什么,因为我遵循了GitHub上的CarrierWave使用指南 这是我的申请表: class SplitterStripeServer < Sinatra::Base CarrierWave.configure do |config| config.root = F

我正在尝试保存一个文件,以便使用CarrierWave将其上载到stripe,但出现错误:

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

我觉得我缺少了一些简单的东西。

您需要减少文件名的长度。重写
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
class ImagesUploader
您需要减少文件名的长度。重写
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
class ImagesUploader
检查是否安装了其他gems
我已经安装了gem
从\u数据库验证\u长度\u
,这个gem不知道如何使用carrierwave。我只是在模型中关闭它,验证数据库中的长度,除了:%I[文件]检查您是否安装了其他gems

我已经安装了gem
从\u数据库验证\u长度\u
,这个gem不知道如何使用carrierwave。我只是在model
中关闭它,验证来自\u数据库的\u长度,除了:%I[文件]

如果您输入发生错误的行号会有所帮助。抱歉,在我调用
图像时会发生此错误。保存
请花时间使用正确的语法。“Stack Overflow是一本在线参考书,不是一个讨论列表,标点和拼写对它很重要。@铁皮人完成了,抱歉,但有什么解决方案的线索吗?你在数据库中为字符串字段发送太多数据了。”。该字段仅允许255个字符。如果您输入发生错误的行号,则会有所帮助。对不起,当我调用
image时会出现此错误。请花时间使用正确的语法。“Stack Overflow是一本在线参考书,不是一个讨论列表,标点和拼写对它很重要。@铁皮人完成了,抱歉,但有什么解决方案的线索吗?你在数据库中为字符串字段发送太多数据了。”。该字段仅允许255个字符。当我这样做时,我仍然会收到相同的错误,但它使我认为我应该传递
params[:file][:tempfile]
这给了我一个不同的错误,但现在它说,当我在
image=image.find之后调用
image.id
该id是一个未定义的方法?在上传之前尝试检查文件名
img=Image.new(文件:params[:file]);img.file.filename
。当我执行
p参数[:file][:filename]
时,如果我
p参数[:file]
我得到
{:filename=>“17.jpg”,:type=>“image/jpeg”,:name=>“file”,:tempfile=>,:head=>“内容处理:表单数据;name=\“file\”filename=>“filename=”filename=>“17.jpg\”\r\n内容类型:image/jpeg\r\n
所以我可以看到tempfile,这就是为什么我会出现错误,但我不知道该怎么办,当我这样做的时候,我仍然会遇到同样的错误,但这让我觉得我应该传递
参数[:file][:tempfile]
这给了我一个不同的错误,但现在我在
image=image.find(1)之后调用
image.id
该id是一个未定义的方法?在上传之前尝试检查文件名
img=Image.new(文件:params[:file]);img.file.filename
。当我执行
p参数[:file][:filename]
时,如果我
p参数[:file]
我得到
{:filename=>“17.jpg”,:type=>“image/jpeg”,:name=>“file”,:tempfile=>,:head=>“内容处理:表单数据;name=\“file\”filename=>“filename=”filename=>“17.jpg\”\r\n内容类型:image/jpeg\r\n
所以我可以看到tempfile,这就是我出错的原因,但我不知道该怎么办
class ImagesUploader < CarrierWave::Uploader::Base
  include CarrierWave::MiniMagick
  storage :file

  def filename
     "#{file.basename[0..250]}.#{file.extension}" if original_filename.present?
  end
end