2017-01-13 8 views
0

Я пытаюсь сохранить файл, чтобы я мог его загрузить на полосу с помощью CarrierWave, но я получаю ошибку:Как исправить значение слишком долго для переменной типа (255) "ошибка

ERROR: value too long for type character varying(255) 

и не понимаю, почему, поскольку я следовал руководству по использованию CarrierWave на GitHub.

Это мое приложение:

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

Помогло бы, если бы вы поместили номер строки, в которой происходит ошибка. – 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

Я все еще получаю ту же ошибку, когда я это делаю, но это заставило меня подумать, что я должен пройти 'params [: file] [: tempfile]' Это дает мне другую ошибку, но теперь она говорит, что когда я вызываю 'image.id' после 'image = Image.find (1)' этот id - неопределенный метод? – Wazza

+0

Попробуйте проверить имя файла перед загрузкой 'img = Image.new (файл: params [: файл]); img.file.filename'. –

+0

, когда я делаю 'p params [: file] [: filename]' i get "17.jpg" – Wazza