为什么这个注释会在Ruby on Rails上创建编译错误?

时间:2009-05-24 19:20:45

标签: ruby-on-rails ruby erb

< pre>

中显示一行
<%= h @stories.inspect %>

并且输出太长,所以我将其更改为

<%= #h @stories.inspect %>

<% @stories.each do |s| %>
  <%= h s.inspect %>
<% end %>

(评论第一行)。现在代码将无法编译......说

编译错误
/Users/winterheat/ror/shov2/app/views/stories/index.html.erb:13:语法错误,意外的kENSURE,期待')'
/Users/winterheat/ror/shov2/app/views/stories/index.html.erb:15:语法错误,意外的kEND,期待')'

如果我完全删除该注释行,代码将起作用。我在一本书中想过,据说你可以在ERB中注释掉一些代码吗?

更新:如果我将其更改为

,那就很有趣了
<% #h @stories.inspect %>

然后它会编译好......所以显示结果标签&lt;%=%&gt;似乎不喜欢评论。

4 个答案:

答案 0 :(得分:6)

将&lt;%=视为含义“将此表达式的值添加到输出流”。没有表达?语法错误。

考虑

output << @stories.inspect

VS

output <<

跟踪如何在erb源中真正处理&lt;%=可能会有所启发。当我开始使用Rails时,我觉得值得付出努力。

答案 1 :(得分:4)

在Ruby / Rails中评论<%= %>标记的正确方法是<%#= %> ...将注释符号放在等号之前。然后一切都会像魅力一样。

答案 2 :(得分:3)

&lt;%=后面应该是一个Ruby表达式,并替换为result。

没有表达会导致错误

答案 3 :(得分:1)

使用

<% #h @stories.inspect %>

而不是

<%= #h @stories.inspect %>

因为

<%= (I expect something that I can convert to string) %>