使用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;只是 在模板中包含注释的语法不正确?或者是 问题更微妙?
谢谢!
答案 0 :(得分:3)
这是一个奇怪的错误,但<%#
是有效的注释语法(没有空格)。它与其他选项相同:
<%=
打印输出<%-
不要在此块之前放置换行符<%#
忽略此块它们中的任何一个都不应在<%
和附加字符之间留有空格。
答案 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?