0

Rails 3.0.3 と次のテンプレート (.html.erb 拡張子付き) を使用しています。

<% "one"; "two"; capture do %>
    Three
<% end %>

次のようにレンダリングされます:

one

どうしてこれなの?<%= を使用しなかったため、何もレンダリングしないようです

編集

多少の混乱があるように思われるので、デバッグしている実際のテンプレート コードによりよく似た再現を以下に示します。

<% my_string = "" %>
<% my_string << capture do %>
    Hello
<% end %>
<%= my_string %>

これは次のようにレンダリングされます。

    Hello    Hello

何らかの理由で、キャプチャされた出力が前者だけでなく my_string に追加されてレンダリングされているためです。

4

1 に答える 1

0

Railsキャプチャヘルパーを使用していますが、構文が間違っています。なぜ印刷されているのかわかりませんone。Rails 3.4では、何も出力されません。

これが正しい使い方です

<% @number = capture do %>
   three
<% end %>

this is some html and here is my <%= @number %>

レンダリングされるhtmlは

this is some html and here is my three

構文が間違っているので、なぜ「1つ」が表示されるのか心配する必要はありません。代わりに、キャプチャヘルパーを正しく使用することに重点を置きます。


編集:

2番目の(編集された)例は、最初の例と同じではありません。これは行番号と最後の行へのわずかな変更で、何が起こっているかを確認できます。

1. <% my_string = "" %>
2. <% my_string << capture do %>
3.     Hello
4. <% end %>
5. before <%= my_string %> after

結果はHello before Hello afterです。したがって、3行目がレンダリングされ、次に5行目がmy_string値を含むようにレンダリングされますHello

これに変更すると

 <% my_string = "" %>
 <% my_string = capture do %>  <!-- changed << to = -->
     Hello
 <% end %>
 before <%= my_string %> after

その結果はbefore Hello afterです。

では、これはどういう意味ですか?使用する<<と、メソッドが台無しになりcapture、通常は予期しない場合でも、キャプチャブロック内にあるものがレンダリングされます。

基本的に、少なくとも現在の構文では、ここで実行しようとしていることを実行することはできません。

于 2012-07-14T00:47:52.290 に答える