Ruby 如何解决“问题”;值太长,无法更改类型字符(255)";错误
我正在尝试保存一个文件,以便使用CarrierWave将其上载到stripe,但出现错误: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
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