2012-06-23 66 views
1

我想用Carrierwave上傳一張圖片,就是上傳文件並將其保存到目錄上傳中,在這個文件夾中它會創建另一個名爲tmp的文件夾,並在tmp文件夾中創建另一個文件夾,其中包括圖片。 事情是,它似乎並沒有阻止它上傳和上傳和上傳所有的時間,即使圖像完全上傳到該文件夾​​,我可以用feh(或任何其他圖像查看器)已經打開此圖像。用sinatra和datamapper和Carrierwave在ruby中上傳圖片?

這是我的控制器的樣子。

get "/new" do 
    protect! 

    erb :new 
end 

post "/new" do 
    protect! 

    @user = User.get(session[:user_id]) 
    image = @user.image.new(
     :description => params[:description], 
     :image => params[:image] 
    ) 

    # image.save 

    "NEVER REACHED!" 

end 

(文本 「!從來沒有達到過」 不會在所有的顯示,我不知道爲什麼...)

這是我的模型:

class ImageUploader < CarrierWave::Uploader::Base 
    def extensions_white_list 
     %w(jpg jpeg gif png) 
    end 

    storage :file 
end 

class Image 
    include DataMapper::Resource 

    property :id, Serial 
    property :description, Text 

    property :image, String, :auto_validation => false 
    mount_uploader :image, ImageUploader 
end 

class User 
    include DataMapper::Resource 

    property :id, Serial 

    has n, :post 
end 

所以正如已經提到的那樣,永遠達不到文本「永遠達不到」。任何想法爲什麼?

而且我總是得到警告:

Defining property for an uploader is deprecated at /usr/lib/ruby/1.9.1/rubygems/custom_require.rb:36:in `require' 

而且我不知道爲什麼...

UPDATE:它以某種方式現在只要我不取消註釋image.save工作在主控制器中,但我其實需要取消註釋,任何想法如何解決此問題?

回答

1

刪除property :image在圖像模型作爲行:

class Image 
    include DataMapper::Resource 

    property :id, Serial 
    property :description, Text 

    mount_uploader :image, ImageUploader 
end 

mount_uploader本身限定了:圖像作爲字符串類型。

嘗試在此之後運行您的應用程序,並讓我知道如果條件保持不變。 :)

+0

哇,謝謝,修復了我的大部分問題,只留下一個單一的問題:當我取消註釋在控制器image.save然後「從來沒有達到!」仍然沒有達到...... –

+0

我試圖解決這個問題,但我不得不承認,我可能會愚蠢地解決這個最後的錯誤,任何想法? –

+0

我有錯誤完全相同的問題:Excon :: Errors :: SocketError at/upload getaddrinfo:請求的名稱是有效的,但沒有找到請求類型的數據。 (SocketError) – Phrozen