1

好的,看看我在 Rails 3 中看到的一些播客,我们现在需要使用<%= %>标签,而以前不需要。但是,只需将其放在我的 application.html.erb 文件中:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head></head>
<body>  
  <%= if true %>
true        
  <% end %>
</body>
</html>

没有像我预期的那样呈现“真实”。相反,我得到一个错误:

Showing /app/views/layouts/application.html.erb where line #5 raised:

/app/views/layouts/application.html.erb:5: syntax error, unexpected ')', expecting keyword_then or ';' or '\n'
  ');@output_buffer.append= ( if true );@output_buffer.safe_concat('
                                       ^
/app/views/layouts/application.html.erb:7: syntax error, unexpected keyword_end, expecting ')'
');   end 
         ^
/app/views/layouts/application.html.erb:10: syntax error, unexpected keyword_ensure, expecting ')'
/app/views/layouts/application.html.erb:12: syntax error, unexpected keyword_end, expecting ')'
Extracted source (around line #5):

2: <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
3: <head></head>
4: <body>  
5:   <%= if true %>
6: true        
7:   <% end %>
8: </body>

回到旧<% %>标签可以解决这个问题。这个对吗?Rails 开发人员决定切换回旧标签还是我错过了什么?

rails -v得到我:Rails 3.0.5

有任何想法吗?

4

2 回答 2

7

这仅适用于某些标签。例如<% form_for ... %>变成<%= form_for ... %>. 在这种情况下,您只需使用<% if true %>. 原因是form_for生成输出,所以你使用<%= %>. 一个简单的 if 语句不会生成输出,因此您使用<% %>. 循环等也是如此:您只需继续使用<% %>.

这里也有解释:

form_for 会将表单标签插入到块中内容周围的视图中,但 erb 标签中没有等号。这打破了将代码输出到视图的 erb 块应该使用 <%= %> 的规则,并且使得在以前的 Rails 版本中很难使用 form_for 的内部结构。然而,从 [Rails 版本 3] 开始,我们在这里使用等号,就像我们使用任何其他生成输出的 erb 代码一样。

于 2011-05-09T07:57:45.340 回答
1
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head></head>
<body>  
  <% if true %>
true        
  <% end %>
</body>
</html>
于 2011-05-09T09:36:46.073 回答