2008-11-17 18 views
38

Wie kann ich verhindern, dass das Bild-Tag, das das zugehörige Bild aufruft, angezeigt wird, wenn dem Bild kein Bild zugeordnet ist?Wie zeige ich Bild in Büroklammer ausblenden, wenn kein Bild vorhanden ist

... gibt mir den Text "Missing", wenn kein Bild mit diesem Agenten verbunden ist. Ich möchte testen, ob zuerst ein Bild verfügbar ist, und dann das obige Tag rendern, wenn der Test wahr ist.

Besser noch, gibt es sowieso für mich, ein Standardbild anzugeben, wenn kein Bild speziell zur Verfügung gestellt wird?

Antwort

58

ich folgendes zu finden, ob ein Modell eine zugehörige Anlage hat:

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

süß, verwendet Büroklammer für eine lange Zeit und tat es nicht weiß darüber;) – s84

+0

Obwohl die andere Antwort eine bessere Allzwecklösung ist, verwende ich diese, weil ich das Layout neu anordnen möchte, wenn etwas kein angehängtes Bild hat, nicht nur ein Platzhalterbild anzeigen. – Alfo

+0

Sehr schön! Dies ist eine einfache schnelle Lösung. – Jordan

31

Okay, also habe ich einen Teil davon.

ein Standardbild geschieht im Modell angeben

18

Nur wenige Bytes weniger:

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

Geben Sie diesem Mann einen Bickie. – Smickie

+0

Ich mag dieses! –

53

Wenn der Avatar mehrere Größen hat:

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

für Rails 3:

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

Dies ist der richtige Weg, dies zu tun. –

+0

Einverstanden, das ist der richtige Ansatz. – Andrew

+3

Ich habe eine Variation mit default_url gemacht, die '/images/:style/missing_modelname.png' für mehrere Modelle ist, die Anhänge haben – corroded

3

Es ist besser zu nutzen: DEFAULT_URL statt Bedingungen.

1

Wenn eine default_url im Modell angegeben wurde, können Sie die Methode verwenden? um zu überprüfen, ob die URL der Standard oder ein hochgeladener URL ist.

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

können Sie verwenden diese

user.photo.exists?(:medium). 
0

ich auch vor das gleiche Problem hatte, aber es gelöst durch die Verwendung:

<% if @post.image.exists? %> 
<%= image_tag @post.image.url %> 
<% end %>