使用没有src属性的image_tag帮助器?

时间:2018-10-19 05:51:41

标签: ruby-on-rails ruby lazy-loading

这可能是一个非常简单的问题,但是如何用Ruby重写呢?

<a href="https://yourlinkhere.com/" target="_blank" rel="noopener noreferrer"><img data-lazy="<%= image_path("assets/images/your-image.png") %>" alt="logo" /></a>

我最初是用这种方式编写的(请参见下文),直到我需要从img标签中删除src属性并将其替换为data-lazy才能利用Slick的延迟加载功能-那就是我与image_tag助手挂在一起的地方:

<%= link_to image_tag("assets/images/your-image.png", alt: "logo"), "https://yourlinkhere.com/", target: "_blank", rel: "noopener noreferrer" %>

我想知道是否我必须在这里使用image_path而不是image_tag,因为我没有包括src属性...除非有使用image_tag助手的方法而不包含src?

谢谢!我通常不使用Ruby on Rails,但是我一直在作为前端开发人员从事的项目中对其进行学习。困在这里。

1 个答案:

答案 0 :(得分:3)

看着image_tag的源代码,令我惊讶的是,似乎无法使用这种方法来生成没有img属性的src标签。但是后来我意识到HTML specificationsrc标签需要img属性。

因此,我认为最好的选择是生成一个img标记,该标记带有一个空src值(如果您的延迟加载库支持的话)。

<%= link_to(
      image_tag('', alt: 'logo', data: { lazy: image_path('your-image.png') }), 
      'https://yourlinkhere.com/', 
      rel: 'noopener noreferrer', target: '_blank'
    ) %>

当您不关心无效的HTML时,可以考虑使用img的块语法手动编写link_to标记。

<%= link_to(
      'https://yourlinkhere.com/', 
      rel: 'noopener noreferrer', target: '_blank') do %>
  <img alt="logo" data-lazy="<%= image_path('your-image.png') %>" />
<% end %>