模板中注释的Rails语法:这个bug是否被理解?

时间:2010-01-18 04:40:26

标签: ruby-on-rails syntax comments partials

使用rails 2.3.2我有一个以注释开头的部分_foo.rhtml 如下:

<% # here is a comment %>
<li><%= foo %></li>

当我以传统方式从视图渲染部分时,例如

<% some_numbers = [1, 2, 3, 4, 5] %>
<ul>
<%= render :partial => "foo", :collection => some_numbers %>
</ul>

我发现&lt; li&gt;和&lt; / li&gt;输出中省略了标记 - 即生成的HTML是

<ul> 1 2 3 4 5 </ul>

但是,我可以通过修复_foo.rhtml来消除之间的空间来解决这个问题 &lt;%和#以便部分现在读取:

<%# here is a comment %>
<li><%= foo %></li>

我的问题:这里发生了什么?例如,是&lt;%#comment%&gt;只是 在模板中包含注释的语法不正确?或者是 问题更微妙?

谢谢!

3 个答案:

答案 0 :(得分:3)

这是一个奇怪的错误,但<%#是有效的注释语法(没有空格)。它与其他选项相同:

  1. <%=打印输出
  2. <%-不要在此块之前放置换行符
  3. <%#忽略此块
  4. 它们中的任何一个都不应在<%和附加字符之间留有空格。

答案 1 :(得分:1)

我自己没有完成测试,但我认为代码应该产生这个:

<ul> 1 </li> 2 </li> 3 </li> 4 </li> 5 </li> </ul>

哪个是无效的HTML。 Firefox在向firebug展示它之前有丢弃它的倾向。您是否通过firebug浏览生成的代码?如果是,我建议你“查看/源代码”,只是为了看到生成的代码是相同的。

我对这里发生的事情的理解是#前面有空格“注释掉”%>位,所以你在下一行实际上“仍然在红宝石中”。不过,它应该在那时给出一个奇怪的错误。但它没有,所以不知何故,这被接受为有效的红宝石代码:

<li><%= foo %>

我不知道这怎么可能返回foo的值:/。

该行上显示的%>实际上是第一行关闭<%的{​​{1}}。如果我是正确的,那么也应该生成</li>

如果情况并非如此,那我就胡说八道了,所以道歉。

答案 2 :(得分:0)

昨天,当我尝试引导新客户端项目的代码时,我遇到了这个问题。有趣的是,它发生在1.8.7上,而不是在几台运行1.8.6的机器上。你在运行什么版本的Ruby?