2011-11-01 25 views

Respuesta

14

Puede usar 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

Lo que sería bueno es el parche de mono image_tag que hizo esto para usted, por lo que no tuvo que repetir esto para cada imagen. Así que compruebe que el archivo existe, si es así, super. De lo contrario, súper con noimg.gif. O crea tu propio helper image_or_default (img, options) – Yule

+0

Sí, te recomiendo hacerlo más tarde porque odio modificar los métodos de framework existentes. –

+1

@BrianMaltzan, entonces sugeriría usar un db para conocer el camino. Esto es lo que hago con aplicaciones web a gran escala que necesitan un CDN. –

2

¿Usted puede usar File.file? método.

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

¿Usted también puede utilizar File.exist? método pero devolverá verdadero si encuentra un directorio o un archivo. ¿El archivo de método? es un poco más exigente que existe?

5

Las otras respuestas son un poco anticuado, debido a cambios en la tubería de activos desde los carriles rieles 4. El siguiente código funciona en los carriles 4 y 5:

Si el archivo se coloca en el directorio público, a continuación, su existencia puede comprobarse con:

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

Sin embargo, si el archivo se coloca en los activos directorio a continuación, comprobar la existencia es un poco más difícil, debido a la pre-compilación activo en entornos de producción. Recomiendo el siguiente enfoque:

# 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 (path) .present?' – m1l05z

Cuestiones relacionadas