【问题标题】: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 注释 <%#= incomplete_erb_with_bugs %> 这将阻止代码被执行 - 而且它永远不会被发送到浏览器。
【解决方案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 %>