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?

¿Fue útil?

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 %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top