Cómo mostrar ocultar imagen en clip cuando no hay imagen presente
-
08-07-2019 - |
Pregunta
¿Cómo puedo evitar que se muestre la etiqueta de imagen que llama a la imagen asociada si no hay ninguna imagen asociada al registro?
<%= image_tag @agent.avatar.url %>
... me da el texto "Falta" si no hay imagen asociada con ese agente. Quiero probar para ver si hay una imagen disponible primero, luego renderizar la etiqueta anterior si la prueba devuelve verdadero.
Mejor aún, ¿hay alguna forma de que especifique una imagen predeterminada si no se proporciona una imagen específica?
Solución
Utilizo lo siguiente para determinar si un modelo tiene un archivo adjunto asociado:
<% if @agent.avatar.file? %>
<%= image_tag @agent.avatar.url(:normal) %>
<% else %>
No attachment available!
<% end %>
Otros consejos
Si el avatar tiene varios tamaños:
has_attached_file :avatar,
:styles => {:small => '30x30#', :large => '100x100#'},
:default_url => '/images/missing_:style.png'
para Rails 3:
has_attached_file :avatar,
:styles => {:small => '30x30#', :large => '100x100#'},
:default_url => '/assets/images/missing_:style.png'
Bien, entonces obtuve una parte de ella.
Especificar una imagen predeterminada ocurre en el modelo
has_attached_file :avatar, :default_url => '/images/brokers/agents/anonymous_icon.jpg'
Pocos bytes menos:
<% if @agent.avatar? %>
<%= image_tag @agent.avatar.url(:normal) %>
<% else %>
No attachment available!
<% end %>
Es mejor usar: default_url en lugar de condiciones.
Si se ha especificado una default_url en el modelo, ¿puede usar el método presente? para comprobar si la URL es la predeterminada o está cargada.
<% if @agent.avatar.present? %>
<%= image_tag @agent.avatar.url(:normal) %>
<% else %>
No attachment available!
<% end %>
Puedes usar esto
user.photo.exists?(:medium).
También tuve el mismo problema antes, pero lo resolví usando:
<% if @post.image.exists? %>
<%= image_tag @post.image.url %>
<% end %>