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


120

您如何注释掉混有ruby代码的html?

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

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

简单的html注释<!-- ... -->不起作用:红宝石代码仍在执行并且大喊错误。

有一个if false与html注释一起使用的选项,但是它很冗长,更不用说IDE不支持它。

还有一个来自纯红宝石的选项,它出奇地起作用。

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

总体来说还不错,除了它很冗长,看起来很怪异,而且我所知道的所有Ruby IDE都不支持它(是的,我喜欢用一个键来评论/注释掉)。

我很好奇,在rails中执行此操作是否有任何“官方”?

谢谢!

Answers:


115

我不算是解决方案,但也许将块之间

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

或者,如果您觉得有点脏,请创建一个仅输出任何内容的助手。

我从不需要它,但我迷迷糊糊的是,似乎没有为此提供现成的解决方案。


@Chloe不太确定您为什么向我直接发表评论,但是您非常正确,<%= false %>这是行不通的。您应该尝试提供的解决方案,但是如果<% if false %>没有=号,该解决方案将起作用
jamesc

@jamesc在您看到我的回复之前,您的评论已被删除。有人删除了您说要使用的评论<%# if false %>
Chloe

162

使用它来注释单行:

<%# your_ruby_code %>

对于多行,

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

你说的行得通。


2
我知道会,如果有什么更简单的方法,我很感兴趣:)
Nikita Rybak 2010年

2
=开始,我认为开始-结束将全部结束=结束#您可能会忽略我的评论,因为它是完全评论的:P
Garfield,2010年

3
如果=是在新行的开头,就像答案一样,它就可以工作
dhaval 2014年

如果是这样<%=%>怎么办?哈希将去哪里-等号之前或之后?
BKSpurgeon

糟糕,尝试添加带有多行代码的注释。而是发布答案。
ViggoV

29

这种=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


3
您甚至可以将其写为<%comment do%> ... <%comment end%>。我已经将此语法添加到了升华文本中,因此它甚至看起来像是真正的注释。
马里亚诺·卡瓦洛

1
可爱的解决方案!一个改进:注释代码以禁用它是一种hack,所以调用该方法ignoredisable,我们将获得一个完全语义的解决方案:<% ignore do %>…<% end %>
tanius


7

对于模板中的块注释,我的文本编辑器(Komodo)发现@Garfield推荐的这种变化最令人讨厌:

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

6

要注释掉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>
-->

据我了解,他正在寻找一种多行注释掉的解决方案:如果我有n行的块,我只想能够在顶部和底部(或者可能是几对)添加一行并拥有它工作。我不想编辑整个块。
dionyziz

6

既然可以使用 <% %>用来放置红宝石块,因此可以肯定地将其放入注释中。

一个更简单,更优雅的解决方案看起来像是...

<%
# 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?
%>

6
这行不通。块注释中的所有ruby标签都将关闭外部块。
Hovis Biddle

4

在= begin之后,您不需要输入%>

<%
=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 %>

2

只是先前答案的附录。我发现= begin / = 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标签<%(在先前的回答中也已指出)

我发现这是最完美的解决方案,它可以完全淘汰红宝石和html混合代码块,并且在<% if false %>解决方案中也将其显示为灰色。美中不足的是,=begin=end必须被放置在最开始的行..


1
我收到此错误:“嵌入的文档遇到文件结尾”
Kieran Andrews

2

使用HEREDOC称为评论

优点:

  • 不言而喻,这是一条评论
  • 适用于erb和HTML标签
  • 语法高亮显示(一个长字符串)

缺点:

  • 奇怪的3行关闭语法
  • 没有键盘快捷键

码:

开头标签可以是

<% <<-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?

结束标签

是的,它必须是3行😟。我不知道为什么打开erb标签很重要,但这很重要!(除非您未在评论中使用任何erb标签)。

<%      
COMMENT
%>

1

您必须牢记在哪里执行代码。Ruby样式的注释之所以起作用,是因为Ruby代码在将其提供给Web浏览器之前已在服务器上执行。这也解释了为什么HTML注释不起作用-Ruby已经执行了。

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


1)您是对的,jsp注释的格式略有不同,我更新了帖子。2)我在IDEA或Netbeans中找不到类似的东西。您有什么想法要说吗?
Nikita Rybak 2010年

1
不,我没有。就个人而言,我不会将IDE用于Rails项目。
John Topley 2010年

1

Sublime Text的块注释快捷方式会ctrl+shift+/通知您是选择了普通HTML还是Erb标签,然后放置<!---<% =begin %>


是的,但这仍然不会同时注释掉HTML ruby。
Adamantish

嗯...听起来像是自定义插件的好理由。也许是权宜之计,您可以按一下ctrl+d以选择该<%块中每个Erb标签的开始,然后单击ctrl+shift+/,然后再次单击它以使整个块注释掉HTML。
iono

1

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

<%if false%><--

stuff to comment out

--><%end%>

好处是:

  • Ruby代码未执行

  • IDE中注释的块为灰色

  • 对于其他开发人员来说,意图很明显


0

这是唯一为我工作的人。

<%
=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 %>


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

希望我能打动您!


-4

对于这个棘手问题,我唯一能接受的解决方案是在“ <%=”内放置一个空格,使其不再注册为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>
-->

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


1
您也可以只添加一个#...,而不是在文档中发送ruby。
最大
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.