如何在图像标签选项中编写红宝石代码?

时间:2018-10-17 10:07:37

标签: ruby-on-rails ruby onerror

今天使用图像时,我遇到了一个问题:当图像不存在或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") JavaScript处理程序中获取onerror的值。
但是我无法在onerror处理程序中编写ruby。怎么做?

1 个答案:

答案 0 :(得分:3)

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

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