升级到Rails 3:<%=如果表达式%>引发错误

aar*_*ona 1 ruby-on-rails erb ruby-on-rails-3 rails-3-upgrade

好好看一些播客,我已经看到在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>
Run Code Online (Sandbox Code Playgroud)

不会像我预期的那样呈现'真实'.相反,我得到一个错误:

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>
Run Code Online (Sandbox Code Playgroud)

回到旧<% %>标签修复了这个问题.它是否正确?rails开发人员是否决定切换回旧标签,或者我错过了什么?

rails -v 得到我: Rails 3.0.5

有任何想法吗?

Mis*_*cha 7

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

这里也解释了:

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