2

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

那么它会编译得很好......所以结果标签 <%= %> 的显示似乎不喜欢评论。

4

4 回答 4

6

将 <%= 视为“将此表达式的值添加到输出流”的意思。没有表情?语法错误。

考虑

output << @stories.inspect

对比

output <<

跟踪 <%= 在 erb 源中如何真正处理可能会很有启发性。当我开始使用 Rails 时,我发现付出努力是值得的。

于 2009-05-24T19:35:12.263 回答
4

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

于 2009-05-24T21:20:42.130 回答
3

<%= 后面应该跟一个 Ruby 表达式并用结果替换。

没有表达式会导致错误

于 2009-05-24T19:26:42.623 回答
1

采用

<% #h @stories.inspect %>

代替

<%= #h @stories.inspect %>

因为

<%= (I expect something that I can convert to string) %>
于 2009-05-24T21:15:52.153 回答