Rails 5, nil не является допустимым источником ресурсов

Я только что обновился до Rails 5, и у меня возникла странная проблема при попытке показать изображение.

У меня есть точный код для Rails 4:

<%= image_tag article.image_url(:thumb) %>

Но после обновления я получаю:

nil is not a valid asset source

До обновления до Rails 5 у меня не было подобных проблем.

Что тут может быть виновато? Может ли это быть чем-то другим, а не проблемой обновления Rails?


person Tasos Anesiadis    schedule 30.05.2016    source источник
comment
Похоже, у вас просто нет изображения в этой записи. Не могли бы вы это подтвердить?   -  person Ivan Shamatov    schedule 30.05.2016


Ответы (4)


Проблема заключалась в том, что я пытался показать изображение, которого не существовало.

Добавление unless article.image.blank? решило это:

<%= image_tag article.image_url(:thumb) unless article.image.blank? %>

РЕДАКТИРОВАТЬ: В Rails 4 это просто не отобразило бы ничего без ошибок, а в Rails 5 это вызвало бы ошибку. Так что это был, по сути, вопрос обновления.

Большое спасибо @BookOfGreg за указание на это.

person Tasos Anesiadis    schedule 25.07.2016
comment
Для тех, кто добрался сюда без несущей волны: в rails 4 это привело бы к отображению пустого тега img, в rails 5 он поднялся бы на nil, так что есть небольшая разница. - person BookOfGreg; 28.03.2017
comment
В знак солидарности. . - person Leo Brown; 01.06.2017
comment
Там же. Кроме того, отсутствие изображений по умолчанию вызовет эту ошибку в Rails 5, и может потребоваться немало усилий, чтобы найти причину. - person okay56k; 20.09.2017
comment
Если вам все еще нужно создать тег <img>, даже если изображение недоступно, вы можете использовать content_tag(:img, nil, src: "...", alt: "...") (возможно, потому что вы позже установите его источник с помощью JavaScript). - person Joshua Muheim; 09.06.2018
comment
лучше избегать unless. Приведенный выше код можно изменить на <%= image_tag article.image_url(:thumb) if article.image.present? %> - person Victor Ivanov; 04.07.2018
comment
@ViC Я думаю, что в этом случае это точно так же, как с использованием unless...blank и if...present. Было бы плохо использовать, если бы у нас не было чего-то вроде unless...!blank, что заставляет человека, читающего код, думать двойным отрицанием. - person Tasos Anesiadis; 05.07.2018

Я не знаю, компактное это решение или нет, но этот код будет работать.

активируйте резервный метод в вашем загрузчике.

  def default_url
    "/assets/fallback/" + [version_name, "default.png"].compact.join('_')
  end

Надеюсь, что это поможет вам.

Ура (у)

person Simranjit Singh    schedule 24.07.2016
comment
Я уже решил это, но я забыл обновить этот пост. В любом случае, спасибо. - person Tasos Anesiadis; 25.07.2016

Попробуйте с этим, вам нужно добавить условие если в свой код. Вам нужно добавить ниже код

‹%= image_tag article.image_url(:thumb), если только article.image.blank? %>

person Rahul2692    schedule 19.09.2016

Я надеюсь, что этот фрагмент кода поможет будущим читателям.

<td><%= image_tag image.picture.url, size: "100x100" unless image.picture.url.blank? %></td>

без этой unless image.picture.url.blank? части кода,

«ноль не является допустимым источником активов»

появляется при загрузке пустого изображения.

person toking    schedule 06.06.2018