2011-11-01 18 views

risposta

14

È possibile utilizzare 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

Che cosa sarebbe bello è di patch scimmia image_tag che ha fatto questo per te in modo da non dover ripetere questo per ogni immagine. Quindi controlla se il file esiste, super. Altrimenti super con noimg.gif. Oppure crea il tuo helper image_or_default (img, options) – Yule

+0

Sì, ti consiglio di farlo più tardi perché odio modificare i metodi framework esistenti. –

+1

@BrianMaltzan quindi suggerirei di usare un db per conoscere il percorso. Questo è quello che faccio con le applicazioni web su larga scala che hanno bisogno di un CDN. –

2

È possibile utilizzare File.file? metodo.

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

È inoltre possibile utilizzare File.exist? metodo ma restituirà true se trova una directory o un file. Il file del metodo? è leggermente più pignolo di quello esistente?

5

Le altre risposte sono un po 'datata, a causa di cambiamenti nella risorsa gasdotto Rails dal Rails 4. Il seguente codice funziona in Rails 4 e 5:

Se il file viene inserito nella directory pubblica, allora la sua esistenza può essere controllato con:

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

Tuttavia, se il file viene inserito nelle attivi directory poi controllando l'esistenza è un po 'più difficile, a causa di un'attività di pre-compilazione in ambienti di produzione. Raccomando il seguente approccio:

# 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

Problemi correlati