1

使用 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>

我发现输出中省略了 <li> 和 </li> 标签——即生成的 HTML 是

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

但是,我可以通过修复 _foo.rhtml 以消除 <% 和 # 之间的空格来解决此问题,以便部分现在显示为:

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

我的问题:这里发生了什么?例如,<% # comment %> 是否只是在模板中包含注释的语法不正确?还是问题更微妙?

谢谢!

4

3 回答 3

3

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

  1. <%=打印输出
  2. <%-不要在此块之前放置换行符
  3. <%#忽略此块

<%它们中的任何一个都不应在 the和附加字符之间有空格。

于 2010-01-18T05:00:58.883 回答
1

我自己没有做过测试,但我的印象是代码应该生成这个:

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

这是无效的 HTML。Firefox 倾向于在将其展示给 firebug 之前将其丢弃。你是通过firebug浏览生成的代码吗?如果是的话,我建议你“查看/源代码”,只是看看生成的代码是一样的。

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

<li><%= foo %>

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

%>出现在该行上的实际上是关闭第一行的那个<%。如果我是正确的,那么</li>也应该生成。

如果不是这种情况,那么我在胡说八道,所以道歉。

于 2010-01-18T15:07:59.317 回答
0

昨天,当我尝试为新客户的项目引导代码时,我遇到了这个确切的问题。有趣的是它发生在 1.8.7 上,但不是在运行 1.8.6 的几台机器上。您正在运行哪个版本的 Ruby?

于 2010-05-26T14:10:14.170 回答