2017-01-13 11 views
0

CarrierWave를 사용하여 스트라이프에 파일을 업로드 할 수 있도록 파일을 저장하려고하는데 오류가 발생합니다 :"유형 문자 변경 (255)에 너무 긴 값"오류를 수정하는 방법

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 Image 
    include DataMapper::Resource 

    property :id, Serial 

    mount_uploader :file, ImagesUploader 
end 

나는 단순한 뭔가 빠진 것 같은 기분 :

class ImagesUploader < CarrierWave::Uploader::Base 
    include CarrierWave::MiniMagick 
    storage :file 
end 

이 모델입니다

내 응용 프로그램입니다.

+0

오류가 발생한 행 번호를 입력하면 도움이됩니다. – coletrain

+0

죄송합니다.'image.save'를 호출 할 때 발생합니다. – Wazza

+0

적절한 문법을 ​​사용하시기 바랍니다. 구두점 및 철자법은 토론 목록이 아닌 온라인 참조 서인 Stack Overflow에서 중요합니다. –

답변

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 
+0

Im이 작업을 수행 할 때 여전히 동일한 오류가 발생하지만 'params [: file] [: tempfile]'을 전달해야한다고 생각하게되었습니다.이 오류는 다른 오류를 발생 시키지만 이제는 'image.id'를 호출 한 후 'image = Image.find (1)'id는 정의되지 않은 메소드입니까? – Wazza

+0

업로드하기 전에 파일 이름을 확인해보십시오.'img = Image.new (file : params [: file]); img.file.filename'. –

+0

내가'p params [: file] [: filename]''나는 얻는다 "17.jpg" – Wazza