Как написать код ruby ​​в опции тега изображения? - PullRequest
0 голосов
/ 17 октября 2018

Сегодня при работе с изображениями у меня возникает проблема: когда изображение отсутствует или имеет недопустимый URL (404 или около того), мне нужно заменить его на asset_path("default_avatar.png").Поэтому я попытался:

def get_url_avatar url
  return url if url.present? && Faraday.head(url).status == 200
  asset_path "default_avatar.png"
end

Но затем я нашел другое решение - опция onerror в image_tag для решения проблемы на стороне клиента.Новый код:

<%= image_tag (user.avatar),
    class: "avatar",
    onerror: "this.src='asset_path("default_avatar.png")';" %>

или

<%= image_tag (user.avatar),
    class: "avatar",
    onerror: "this.src='<%= asset_path("default_avatar.png") %>';" %>


Теперь у меня новая проблема с image_tag.Мне нужно получить значение asset_path("default_avatar.png") в onerror обработчик JavaScript.
Но я не могу написать ruby ​​в обработчике onerror.Как это сделать?

1 Ответ

0 голосов
/ 17 октября 2018

В erb все между <%= и %> является кодом ruby, поэтому используйте интерполяцию строки ruby:

<%= image_tag (user.avatar),
    class: "avatar",
    onerror: "this.src='#{asset_path("default_avatar.png")}';" %>
...