そもそもストリーミングとは?なぜあなたはそれを使うのですか?
ストリーミングは、ページをトップダウン (アウトサイド イン) でレンダリングする代替方法です。デフォルトのレンダリング動作は裏返しです。コントローラーでストリーミングを有効にする必要があります。
class MyController
def action
render stream: true # Streaming enabled
end
end
ドキュメントによると:
ストリーミングは、新規作成や編集などの軽量アクションには過剰であると見なされる場合があります。ストリーミングの真の利点は、たとえば、データベースに対して多くのクエリを実行するなど、コストのかかるアクションにあります。
では、ストリーミングを使用していない場合でも、違いはありますか?
はい。
違いは、テンプレートは複数回呼び出すことで複数のコンテンツ ブロックを定義できることです。content_for
そうすることで、ブロックが連結され、それがレイアウトに渡されます。
# layout.html.erb
<div class="heading"><%= yield :surprise %></div>
<div class="body">
<p><%= yield %></p>
<p>But it's not very interesting...</p>
</div>
# template.html.erb
<%= content_for :surprise, "Hello" %>
I've got your content!
<%= content_for :surprise, ", World!" %>
# Generated HTML
<div class="heading">Hello, World!</div>
<div class="body">
<p>I've got your content!</p>
<p>But it's not very interesting...</p>
</div>
provide
提供されたテンプレートの検索を続行しないため、最初のprovide
呼び出しに渡されたブロックのみがテンプレートに送信されます。
# layout.html.erb
<div class="heading"><%= yield :title %></div>
# template.html.erb
<%= provide :title, "Foo" %>
<%= provide :title, "bar" %>
# Generated HTML
<div class="heading">Foo</div>