Как показать скрытое изображение в скрепке, когда изображение отсутствует

Как я могу предотвратить отображение тега изображения, который вызывает связанное изображение, если с записью не связано ни одно изображение?

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

... дает мне текст «Отсутствует», если с этим агентом не связано ни одного изображения. Я хочу сначала проверить, есть ли доступное изображение, а затем отобразить вышеуказанный тег, если тест возвращает true.

Еще лучше, могу ли я указать изображение по умолчанию, если изображение специально не предоставлено?


person neezer    schedule 17.11.2008    source источник


Ответы (8)


Я использую следующее, чтобы узнать, есть ли у модели связанное вложение:

<% if @agent.avatar.file? %>
  <%= image_tag @agent.avatar.url(:normal) %>
<% else %>
  No attachment available!
<% end %>
person Christoph Schiessl    schedule 17.11.2008
comment
мило, давно пользовался скрепкой и не знал об этом ;) - person thenengah; 16.01.2011
comment
Хотя другой ответ является лучшим универсальным решением, я использую его, потому что хочу изменить макет, если что-то не имеет прикрепленного изображения, а не просто отображать изображение-заполнитель. - person Alfo; 09.03.2013
comment
Очень хорошо! Это легкое быстрое решение. - person Jordan; 20.05.2014

Если аватар имеет несколько размеров:

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

для рельсов 3:

has_attached_file :avatar, 
                  :styles => {:small => '30x30#', :large => '100x100#'}, 
                  :default_url => '/assets/images/missing_:style.png'
person Voldy    schedule 16.11.2010
comment
я сделал вариант с default_url как «/images/:style/missing_modelname.png» для нескольких моделей, у которых есть вложения - person corroded; 16.05.2011

Итак, я получил одну часть этого.

Указание изображения по умолчанию происходит в модели

has_attached_file :avatar, :default_url => '/images/brokers/agents/anonymous_icon.jpg'
person neezer    schedule 17.11.2008

На несколько байт меньше:

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

Лучше использовать :default_url, а не условия.

person ashisrai_    schedule 18.11.2010

Если в модели указан default_url, вы можете использовать существующий метод? чтобы проверить, является ли URL-адрес по умолчанию или загруженным.

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

Вы можете использовать это

user.photo.exists?(:medium).
person stopanko    schedule 19.12.2014

У меня тоже была такая же проблема раньше, но я решил ее, используя:

<% if @post.image.exists? %>
<%= image_tag @post.image.url %>
<% end %>
person Nami    schedule 14.03.2017