2017-01-13 14 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 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で問題となります。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(file:params [:file]); img.file.filename'。 –

+0

私が '' p params [:file] [:ファイル名] ''取得する '17.jpg " – Wazza

関連する問題