2011-11-01 18 views

उत्तर

14

आप File.exist? का उपयोग कर सकते हैं।

if FileTest.exist?("#{RAILS_ROOT}/public/images/#{img}") 
    image_check = image_tag("#{img}",options) 
else 
    image_check = image_tag("products/noimg.gif", options) 
end 
+0

क्या अच्छा होगा बंदर पैच IMAGE_TAG है कि आप के लिए ऐसा किया है ताकि आप प्रत्येक छवि के लिए इस दोहराने के लिए नहीं था के लिए है। इसलिए अगर यह करता है तो फाइल मौजूद है, सुपर। अन्यथा noimg.gif के साथ सुपर। या अपना स्वयं का सहायक image_or_default (img, विकल्प) – Yule

+0

बनाएं, मैं बाद में ऐसा करने की अनुशंसा करता हूं क्योंकि मुझे मौजूदा ढांचे के तरीकों को संशोधित करने से नफरत है। –

+1

@BrianMaltzan तो मैं पथ जानने के लिए एक डीबी का उपयोग करने का सुझाव दूंगा। यह वही है जो मैं बड़े पैमाने पर वेब अनुप्रयोगों के साथ करता हूं जिन्हें सीडीएन की आवश्यकता होती है। –

2

आप File.file का उपयोग कर सकते हैं? तरीका।

if File.file?("#{Rails.root}/app/assets/images/{image_name}") 
    image_tag("#{image_name}") 
end 

आप File.exist का भी उपयोग कर सकते हैं? विधि लेकिन अगर यह निर्देशिका या फ़ाइल पाती है तो यह सच हो जाएगी। विधि फ़ाइल? अस्तित्व से थोड़ा अधिक picky है?

5

अन्य उत्तर रेल 4. के बाद से रेल संपत्ति पाइप लाइन में परिवर्तन की वजह से, एक छोटे से पुराने हो गए हैं निम्नलिखित कोड रेल 4 और 5 में काम करता है:

अपनी फ़ाइल सार्वजनिक निर्देशिका में रखा जाता है, , अगर फ़ाइल उत्पादन वातावरण में संपत्ति पूर्व संकलन के कारण संपत्ति निर्देशिका तो अस्तित्व की जाँच में रखा गया है, एक छोटे से कठिन है

# File is stored in ./public/my_folder/picture.jpg 
File.file? "#{Rails.public_path}/my_folder/picture.jpg" 

हालांकि: तो अपने अस्तित्व के साथ जाँच की जा सकती। मैं निम्नलिखित दृष्टिकोण की सिफारिश:

# File is stored in ./app/assets/images/my_folder/picture.jpg 

# The following helper could, for example, be placed in ./app/helpers/ 
def asset_exists?(path) 
    if Rails.configuration.assets.compile 
    Rails.application.precompiled_assets.include? path 
    else 
    Rails.application.assets_manifest.assets[path].present? 
    end 
end 

asset_exists? 'my_folder/picture.jpg' 
+0

'Rails.application.assets_manifest.find_sources (पथ) .present?' – m1l05z

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