<%= image_tag("/images/users/user_" + @user_id.to_s + ".png") %>
Come si controlla se esiste una tale immagine e, in caso contrario, non viene visualizzato nulla?Come verificare se l'immagine esiste in Rails?
Lavorare in Rails 3.07.
<%= image_tag("/images/users/user_" + @user_id.to_s + ".png") %>
Come si controlla se esiste una tale immagine e, in caso contrario, non viene visualizzato nulla?Come verificare se l'immagine esiste in Rails?
Lavorare in Rails 3.07.
È 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
È 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?
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'
'Rails.application.assets_manifest.find_sources (path) .present?' – m1l05z
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
Sì, ti consiglio di farlo più tardi perché odio modificare i metodi framework esistenti. –
@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. –