2008-11-17 7 views
38

W jaki sposób można zapobiec wyświetlaniu obrazu, który wywołuje skojarzony obraz, jeśli do rekordu nie jest powiązany obraz?Jak pokazać ukryty obraz w spinaczu, gdy nie ma obrazu

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

... daje mi tekst "Brakujący", jeśli nie ma obrazu skojarzonego z tym agentem. Chcę przetestować, aby zobaczyć najpierw dostępny obraz, a następnie renderować powyższy tag, jeśli test zwróci wartość true.

Czy jest jeszcze lepiej, czy mogę określić domyślny obraz, jeśli nie ma konkretnego obrazu?

Odpowiedz

58

używam następujących aby znaleźć pogoda model ma przypisany załącznik:

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

słodki, używany spinacza przez długi czas i nie wiecie o tym;) – s84

+0

Chociaż druga odpowiedź jest lepszym rozwiązaniem ogólnego przeznaczenia, używam tego, ponieważ chcę zmienić układ, jeśli coś nie ma dołączonego obrazu, a nie tylko wyświetla obraz zastępczy. – Alfo

+0

Bardzo ładne! To łatwa, szybka naprawa. – Jordan

31

OK, więc dostałem jedną jego część.

Określanie domyślnego obrazu dzieje w modelu

18

kilka bajtów mniej:

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

Daj temu mężczyźnie bickie. – Smickie

+0

Poszlakowanie tego! –

53

Jeśli awatar ma wiele rozmiarów:

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

dla szyny 3:

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

To jest właściwy sposób, aby to zrobić. –

+0

Uzgodnione, to jest prawidłowe podejście. – Andrew

+3

Zrobiłem odmianę z parametrem default_url będącym "/images/:style/missing_modelname.png" dla wielu modeli z załącznikami – corroded

3

Lepiej jest użyć: DEFAULT_URL zamiast warunkach.

1

Jeśli w modelu określono wartość default_url, można użyć obecnej metody? aby sprawdzić, czy adres URL jest domyślny czy przesłany.

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

Można to wykorzystać

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

miałem również ten sam problem przed, ale rozwiązać go za pomocą:

<% if @post.image.exists? %> 
<%= image_tag @post.image.url %> 
<% end %> 
Powiązane problemy