2011-09-07 14 views
20

पर फ़ाइल को स्टोर करने के लिए कैसे करें मेरे पास कैरियरवेव सामान्य ओआरएम सेटअप के माध्यम से ठीक काम कर रहा है और फॉर्म के माध्यम से अपलोड कर रहा है। मैं फॉर्म सबमिशन संदर्भ के बाहर कैरियरवेव का उपयोग करने का तरीका जानना चाहता हूं। उदाहरण के लिए, जब कोई उपयोगकर्ता पंजीकृत होता है तो मैं अपने गुरुत्वाकर्षण को पकड़ना चाहता हूं और इसे कैरियरवेव के साथ स्टोर करना चाहता हूं। यहां मेरे पास है, और यह काम नहीं करता है:कैरियरवेव दिए गए यूआरएल

gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon" 

uploader = ImageUploader.new 
uploader.store! gravatar_url 

कोई त्रुटि नहीं। मैं वेब के चारों ओर देख रहा हूं और समाधान ढूंढने में सक्षम नहीं हूं।

उत्तर

16

मुझे स्थानीय फ़ाइल पथों के साथ काम करने के लिए store! प्राप्त करने का तरीका जानने में बहुत सारी परेशानी हुई है। यह पता चला है कि store! वास्तव में एक पैरामीटर के रूप में एक फ़ाइल लेता है, एक स्ट्रिंग नहीं।

यूआरएल के लिए, आपको पहले require 'open-uri' की आवश्यकता होगी, फिर फ़ाइल/यूआरएल खोलें। कुछ इस तरह काम करना चाहिए:

require 'open-uri' 
gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon" 
tempfile = open(gravatar_url)  

uploader = ImageUploader.new 
uploader.store! tempfile 

ही एक फ़ाइल पथ के साथ काम करेंगे, लेकिन आप उस मामले में open-uri की आवश्यकता की जरूरत नहीं है।

17

असल में आप remote_{attribute}_url संपत्ति का उपयोग करके यह कर सकते हैं यदि आप सक्रिय रिकॉर्ड/मॉडल हेल्पर्स का उपयोग कर रहे हैं (विवरण के लिए कैरियरवेव रेलवेकास्ट देखें)। हालांकि, मैं चारों ओर स्रोत कोड में एक सा परिणाम जानने के लिए वास्तव में कार्य करता खोदा और ऐसा लगता है कि आप निम्नलिखित का उपयोग करने में सक्षम होना चाहिए, भले ही आप नहीं कर रहे हैं:

uploader = ImageUploader.new 
uploader.download! some_remote_url 
uploader.store! 

इसे आज़मा कर देखें।

+0

ऐसा लगता है कि यह एक सुरक्षित समाधान है। – Codii

+0

यह एक सबसे अच्छा है, क्योंकि इस विधि के साथ हम फ़ाइल एक्सटेंशन को सहेजते हैं। – merqlove

+0

बहुत बढ़िया, धन्यवाद! –

44
उपयोगकर्ता के बाद नियंत्रक में

लिए साइन अप (यह मानते हुए अपने उपयोगकर्ता छवि क्षेत्र बस 'छवि' कहा जाता है)

gravatar_url = "http://www.gravatar.com/avatar/#{Digest::MD5.new.update(current_user.email)}?s=512&d=identicon" 
@user.remote_image_url = gravatar_url 
@user.save 

मुझे लगता है कि यह चारों ओर खोज carrierwave docs और कुछ के अनुसार सबसे अच्छा तरीका है।

आनंद लें!

+0

यह बहुत अच्छा काम करता है। धन्यवाद! मैंने अधिक जटिल तरीकों को समझने में काफी समय बिताया। – rohitmishra

+2

खुश मैं मदद कर सकता था! सामाजिक या किसी भी सेवा एपीआई से आयात करते समय यह वास्तव में उपयोगी तरीका है। – nurinur

+0

मैं इसे कॉलबैक में पहले_क्रेट में उपयोग करना चाहता हूं क्योंकि मैं उस रचना का उपयोग करता हूं जहां मेरे पास कोई नियंत्रक नहीं है, लेकिन यह काम नहीं करता है। – aisensiy

संबंधित मुद्दे