图片标签选项中如何写ruby代码?

How to write ruby code in option of image tag?

今天在处理图像时,我遇到了一个问题:当图像不存在或无效时 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

但后来我找到了其他解决方案 - image_tag 中的 onerror 选项来处理客户端的问题。 新代码:

<%= 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 的新问题。我需要在 onerror javascript 处理程序中获取 asset_path("default_avatar.png") 的值。
但是我不能在 onerror 处理程序中写 ruby 。怎么做?

在 erb 中,<%=%> 之间的所有内容都是 ruby 代码,因此在此处使用 ruby 字符串插值:

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