2011-08-11 83 views
2

我正在嘗試編寫一種方法來存儲來自給定url的圖像,在紅寶石工人內部。它來自我的Rails應用程序,我在其中顯示對象圖像。 這裏是我想出來的:使用Carrierwave在紅寶石工人內部保存圖像

def store(url) 
    @object = Object.find(1) 
    @object[:image] = CarrierWave::Uploader.store!(image_url) 
end 

它似乎並沒有在所有的工作。 任何線索? 是否有其他解決方法?

[編輯]

這是目前的情況:

def store 
    @object = Object.find(1) 
    my_uploader = ImageUploader.new 

    image = open("http://twitpic.com/show/iphone/xxxx.jpg") 
# or for a local file: 
    image = File.open(Rails.root.join('xxxx.png')) 

    @object[:image] = my_uploader.store!(image) 
    @object.save! 
end 

的文件名在[:圖片] attibute仍然是錯誤的。它給出了「[:store_versions!]」。我如何得到正確的文件名?

[EDIT2]

右移之前添加保存得到@artwork[:image] = my_uploader.filename的文件名。 但@object = Object.find(1)將不起作用。如何從工作人員訪問我的Rails應用程序中的Object類?

+0

[編輯]我發現瞭解決方案的一部分:圖像被上傳,但@object [:image]中的字符串仍然是錯誤的。 – PEF

+0

[編輯2]文件名好的,仍然無法訪問對象類 – PEF

回答

1

@object.image.store!(image)終於做了工作!

0

你要創建一個新的上傳對象,並將其指向您的文件

image = File.open(Rails.root.join('path', 'to', 'file.png')) 
@object[:image] = YourUploader.new(image) 
+0

你如何做到這一點的網址,而不是本地文件? – noli

+0

好的,我正在嘗試這種方式。順便說一句,這是一個本地文件是不是? (並且缺少右括號) – PEF

+0

是的,對不起,應該有一個額外的括號:P如果該文件在本地不可用,那麼您需要先下載它,然後查看ruby net http類。 http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html –