阻止 Rails 中 html.erb 模板中的注释

如何注释掉混合了红宝石代码的 html?

some text <% ... %> more text <%= ... %>
something else
<% ... %>

在 jsp 中,它非常简单: <%-- ... --%>,但是我无法在 ails 中找到任何简洁的选项。

简单的 html 注释 <!-- ... -->不起作用: Ruby 代码仍然执行,并大喊错误。

有一个对 html 注释使用 if false的选项,但是它非常冗长,更不用说 IDE 不支持它了。

还有一个选项来自纯红宝石,这令人惊讶的工作。

<%
=begin %>
... html and ruby code goes here
<%
=end %>

它通常很好,除了它冗长、外观怪异,而且我所知道的 Ruby IDE 中没有一个支持它(是的,我喜欢一键注释/注释)。

我很好奇,有没有什么“官方”在铁轨上做这个?

谢谢!

103047 次浏览

您必须记住代码是在哪里执行的。Ruby 风格的注释之所以能够正常工作,是因为 Ruby 代码在服务器上执行之后,才会被提供给 Web 浏览器。这也解释了为什么 HTML 注释不起作用,Ruby 已经被执行了。

您使用的 IDE 不支持创建用于注释代码块的自定义宏吗?

用它来注释单行文字:

<%# your_ruby_code %>

对于多行,以下代码可以工作:

<% =begin %>
<% ruby_code %>
<% =end %>

你说的可行。

我不认为这是一个解决方案,但也许可以将

<% if false %>
...
<% end %>

或者,如果你觉得有点脏,创建一个帮助器,只是输出任何东西。

我从来不需要它,但我被绊倒了,似乎没有现成的解决方案。

要注释出 erb 标记,在开始标记的 = 符号之前使用 ruby 注释散列符号

<p>
This is some text I want to keep
<%= @some_object.some_attribute %>
</p>
<p>
I want to keep this text but comment out the erb tag
<%#= @some_object.another_attribute %>
</p>
<!--
<p>
I want all of this text commented out including the erb tag
<%#= @some_object.some_attribute %>
</p>
-->
<!--
<p>
I just want this html commented out but I want to keep the erb tag
<%= @some_object.some_attribute %>
</p>
-->

Sublime Text 的块注释快捷方式 ctrl+shift+/会注意您是选择了普通的 HTML 还是 Erb 标记,并放入 <!---或 < code > <% = 开始% > 相应地。

对于模板中的块注释,我的文本编辑器(Komodo)认为 @ Garfield 的推荐信的这个变体最不讨厌:

<%# A long multiline comment in a rails template ...
# line 2
# and so on ...
# %>
<%#=


...commented
multiline
block...


%>

=begin的做法令人恼火,因为:

  1. 它不适用于单行中的 HTML 和 Ruby (或者仅仅是 HTML)混合
  2. 打字很烦人

<% if false %>方法可以工作,但是它看起来很奇怪,并且不会给查看代码的其他人有关您的意图的提示。

我的解决办法如下:

application_helper.rb中,添加如下方法:

def comment
end

然后在视图模板中,您可以说:

<% comment do %>Some stuff that won't be rendered...<% end %>

这是因为任何 Ruby 方法都可以接受一个块,但是如果您的方法不包含 yield,那么将无声地忽略传入的块。

由于可以使用 <% %>放置一个 Ruby 块,所以当然可以使用它在其中放入注释。

一个简单而优雅的解决方案看起来像..。

<%
# See! I am a Ruby Comment
# And I am multi-line
# I look like a recognizable ruby comment block too
# and not so complex
# The only drawback with me is the Hash symbol you have to repeat
# But it's the norm, isn't it?
%>

这是唯一为我工作的人。

<%
=begin %>


code code code code code code
code code code code code code
code code code code code code
code code code code code code


=end %>

After = start 不需要放置% >

<%
=begin


code code code code code code
code code code code code code
code code code code code code
code code code code code code


=end %>

我找到的解决这个棘手问题的唯一可接受的方法是在“ <% =”中放置一个空格,使其不再注册为 Ruby 代码,然后用 html 注释注释掉整个代码块

像这样:

<!--
<p>
< %= @some_object.some_attribute %>
</p>
<p>
< %= @some_object.another_attribute %>
</p>
<p>
< %= @some_object.some_attribute %>
</p>
<p>
< %= @some_object.some_attribute %>
</p>
-->

是的,添加空格很烦人,但是这是我所见过的所有解决方案中最不烦人的。

只是之前答案的附录。我发现 = start/= end 解决方案最有用,但为了美观起见,我是这样写的:

<%
=begin
<p>HTML will be ignored</p>
<%= 'and so will ruby' %>
<p>
<%= 'plus the whole block will be greyed in editor' %>
</p>
=end
%>

请注意,由于在 =end之前所有内容都被忽略,因此不需要用 %>关闭 =begin标记或用 <%打开 =end标记(在前面的答案中也指出了这一点)

我发现这是一个最优雅的解决方案,它完全超过了一个混合 Ruby 和 html 代码块的注释,并且在我的编辑器中也将它变成了灰色,这与 <% if false %>解决方案相反。唯一的缺点是,=begin=end必须放在行的最开始。.

可以同时使用 <% if false% > 和 HTML 注释:

<%if false%><--


stuff to comment out


--><%end%>

好处是:

  • 不执行 Ruby 代码

  • 注释块在 IDE 中是灰色的

  • 其他开发人员的意图是显而易见的

使用一个叫做注释的 HEREDOC

优点:

  • 不言而喻,这是一个评论
  • 用于 erb 和 HTML 标记
  • 有 ok 的语法突显(如一根长线)

缺点:

  • 奇怪的三行结束语法
  • 没有键盘快捷键

密码:

开始标签可以是

<% <<-COMMENT %>


the above closing erb tag is just for looks (to match the end),
but don't put anything else there, it may show up on the page

或者

<%
<<-COMMENT
%>

这里的任何东西都不会在浏览器中运行或显示

<P>
this will not be displayed in the browser
<strong> even in the developer's tools </strong>
</p>


<% 1_000_000_000_000.times do |count| %>


for the <%= count %>'th time, this won't run a trillion times,
this is all just a string


all of these %>, <%, <% end %>, end, do, <!--, won't cause any issues.


but the below opening erb tag is important (if you used any erb tags in the comment).
I have no clue why?

结束语

是的,需要三行。 我不知道为什么开头的 erb 标签很重要,但它确实很重要!(除非您在注释中没有使用任何 erb 标记)。

<%
COMMENT
%>
<% %w(
<span title="<%= title %>">hello</span>
) %>

我希望我刚刚让你们大吃一惊!

单程

这是我最喜欢的方式。


<%# START COMMENTED OUT SECTION %>
<%if false%><--


your view code here....


--><%end%>
<%# END COMMENTED OUT SECTION %>

你可能会说,究竟为什么要在代码中使用大写字母来锁定句子?答案是因为很容易忘记(或者根本不知道) <%if false%><-- 在做什么,或者 --><%end%>在做什么。一个昏昏欲睡或者没有咖啡因的开发人员可以很容易地删除它们,认为它们是打字错误,这将是不好的!这就是为什么我试图善待自己/其他开发人员,并使其超级明显。它不简洁或漂亮,但它非常实用,几乎是万无一失的。

第二条路

这种方法是伟大的:

  • 很简单
  • 不是特殊的(即使用通常格式的红宝石)
  • 富有表现力的: 传达正在发生的事情的意义(有人可以很容易地弄清楚它在做什么)
  • 很少

这就是:

<%#


multiple
lines
commented
out


%>