【问题标题】:Why does commented-out ERB still throw errors?为什么注释掉的 ERB 仍然会抛出错误?
【发布时间】:2017-09-21 19:34:04
【问题描述】:

我有一个这种格式的 HTML 文件:

html
more html
<%= valid erb %>

<!--
  <%= incomplete_erb_with_bugs %>
-->

但我仍然得到一个异常页面,因为 ERB 有问题。但是不应该注释掉该部分会导致浏览器无法读取该部分吗?是否有另一种 HTML 方法可以真正阻止浏览器读取代码?

【问题讨论】:

标签: ruby-on-rails ruby html erb


【解决方案1】:

因为它没有被评论。

但不应该评论该部分导致该部分不 被浏览器读取?

浏览器不执行 Ruby 或 ERB - 服务器在将生成的 HTML 文档发送到浏览器之前执行。

ERB 是嵌入在包含文字的文件中的 ruby​​ 代码。除了“erb 标签”中的代码,解释器不关心任何事情。

This is just literal text 
<%# this is a ruby line comment - the code below is executed: %>
<% bar do %>
  <%= foo %>
<% end %> 

其余的只是放在缓冲区中。这就像 PHP 或任何其他嵌入式语言。

因此,HTML 注释(或 CSS 或 JS)不会以任何方式影响 ERB 解释器。解释器并不真正知道或关心它创建的 HTML。

是否有另一种 HTML 方法可以实际阻止浏览器读取代码?

浏览器不执行 Ruby 代码。它只是根据您在响应中发送的任何内容构建一个文档。

所以请使用 ruby​​ 注释 &lt;%#= incomplete_erb_with_bugs %&gt; 这将阻止代码被执行 - 而且它永远不会被发送到浏览器。

【讨论】:

【解决方案2】:

您正在注释掉 html,但其中的 ruby​​ 代码仍会被评估。你需要注释掉代码,这样做是这样的:

<%#= incomplete_erb_with_bugs %>

【讨论】:

    【解决方案3】:

    你需要注释实际的行,而不是它周围的 html

    html
    more html
    <%= valid erb %>
    
    
      <%= incomplete_erb_with_bugs %>
    

    你也可以使用 if 语句

    <% if false %>
          <%#= incomplete_erb_with_bugs %>
    <% end %>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-25
      • 1970-01-01
      相关资源
      最近更新 更多