2013-02-24 60 views
11

आइए कहते हैं मैं अपने seeds.rb फ़ाइल में निम्न प्रविष्टि:seeds.rb भीतर पेपरक्लिप का उपयोग

No such file or directory - {file path} etc... 
:

Image.create(:id => 52, :asset_file_name => "somefile.jpg", :asset_file_size => 101668, :asset_content_type => "image/jpeg", :product_id => 52) 

अगर मैं यह बीज, यह छवि निर्दिष्ट कार्रवाई करने के लिए कोशिश करता है, मैं इस त्रुटि मिलती है

मेरी छवियों का बैक अप लिया गया है, इसलिए मुझे वास्तव में उन्हें बनाने की आवश्यकता नहीं है; लेकिन मुझे रिकॉर्ड की जरूरत है हालांकि। मैं अपने मॉडल में पेपरक्लिप निर्देश पर टिप्पणी नहीं कर सकता; तो यह काम करता है; लेकिन मुझे लगता है कि एक और समाधान हो सकता है।

क्या इसे पूरा करने के लिए अनुसरण करने के लिए कोई और पैटर्न है? या पेपरक्लिप को छवि को संसाधित न करने के लिए एक बदलाव?

उत्तर

37

सीधे संपत्ति कॉलम सेट करने की बजाय, पेपरक्लिप का लाभ उठाने और इसे रूबी File ऑब्जेक्ट के रूप में सेट करने का प्रयास करें।

Image.create({ 
    :id => 52, 
    :asset => File.new(Rails.root.join('path', 'to', 'somefile.jpg')), 
    :product_id => 52 
}) 
+3

मैं इंटरपोलिंग स्ट्रिंग के बजाय 'File.join' का उपयोग करने की सलाह देता हूं। 'File.join (Rails.root,' path ',' to ',' somefile.jpg ') ' – Aleksey

1

अन्य जवाब यहां निश्चित रूप से ज्यादातर स्थितियों के लिए काम करता है, लेकिन कुछ मामलों में यह बजाय एक File से एक UploadedFile प्रदान करने के लिए बेहतर अभी तक हो सकता है। यह अधिक बारीकी से नकल करता है कि पेपरक्लिप को एक फॉर्म से क्या प्राप्त होगा और कुछ अतिरिक्त कार्यक्षमता प्रदान करता है।

image_path = "#{Rails.root}/path/to/image_file.extension" 
image_file = File.new(image_path) 

Image.create(
    :id => 52, 
    :product_id => 52, 
    :asset => ActionDispatch::Http::UploadedFile.new(
    :filename => File.basename(image_file), 
    :tempfile => image_file, 
    # detect the image's mime type with MIME if you can't provide it yourself. 
    :type => MIME::Types.type_for(image_path).first.content_type 
) 
) 

इस कोड को कुछ और अधिक जटिल है, यह सही ढंग से .docx, .pptx, या .xlsx एक्सटेंशन के साथ माइक्रोसॉफ्ट ऑफिस दस्तावेजों की व्याख्या के लाभ है, जो अगर एक फ़ाइल वस्तु का उपयोग कर संलग्न, ज़िप के रूप में अपलोड किया जाएगा है फ़ाइलें।

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

+1

यह अधिक फ़ाइल प्रकारों को संभालने का एक बेहतर समाधान है। यह फोंट के साथ भी काम करता है। –