Domanda

Come posso impedire la visualizzazione del tag immagine che chiama l'immagine associata se nessuna immagine è associata al record?

<%= image_tag @agent.avatar.url %>

... mi dà il testo " Mancante " se non esiste alcuna immagine associata a quell'agente. Voglio testare per vedere prima che sia disponibile un'immagine, quindi rendere il tag sopra se il test ritorna vero.

Meglio ancora, posso comunque specificare un'immagine predefinita se non viene specificata alcuna immagine?

È stato utile?

Soluzione

Uso quanto segue per scoprire se un modello ha un allegato associato:

<% if @agent.avatar.file? %>
  <%= image_tag @agent.avatar.url(:normal) %>
<% else %>
  No attachment available!
<% end %>

Altri suggerimenti

Se l'avatar ha più dimensioni:

has_attached_file :avatar, 
                  :styles => {:small => '30x30#', :large => '100x100#'}, 
                  :default_url => '/images/missing_:style.png'

per Rails 3:

has_attached_file :avatar, 
                  :styles => {:small => '30x30#', :large => '100x100#'}, 
                  :default_url => '/assets/images/missing_:style.png'

Okay, quindi ne ho preso una parte.

La specifica di un'immagine predefinita avviene nel modello

has_attached_file :avatar, :default_url => '/images/brokers/agents/anonymous_icon.jpg'

Pochi byte in meno:

<% if @agent.avatar? %>
  <%= image_tag @agent.avatar.url(:normal) %>
<% else %>
  No attachment available!
<% end %>

È meglio usare: default_url piuttosto che condizioni.

Se nel modello è stato specificato un default_url è possibile utilizzare il metodo presente? per verificare se l'URL è predefinito o caricato.

<% if @agent.avatar.present? %>
  <%= image_tag @agent.avatar.url(:normal) %>
<% else %>
  No attachment available!
<% end %>

Puoi usarlo

user.photo.exists?(:medium).

Ho anche avuto lo stesso problema prima, ma l'ho risolto usando:

<% if @post.image.exists? %>
<%= image_tag @post.image.url %>
<% end %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top