1

いくつかのポッドキャストを見てみましょう。Rails3では、<%= %>以前は使用していなかったタグを使用する必要があります。ただし、これを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>

期待どおりに「true」をレンダリングしません。代わりに、エラーが発生します。

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 -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 に答える