ERB レベルでどのようyield
に機能するかはわかりませんが、レイアウトに適用したときにどのように機能するかは知っています。
サンプルの layout.html.erb ファイルを次に示します。
<html>
<head>
<title> <%= @title || 'Plain Title' %> </title>
<%= yield :head %>
</head>
<body>
<div id='menu'>
<%= yield :menu %>
</div>
<div id='content'>
<%= yield %>
</div>
<div id='footer'>
<%= yield :footer %>
</div>
</body>
4 つの yield (:head、:menu、:footer、および default) とインスタンス変数 @title を定義しました。
これで、コントローラー アクションは、これらのスポットに挿入されるビューをレンダリングできるようになりました。ビューはレイアウトの前にレンダリングされるので、ビューで @title のような変数を定義し、それをレイアウトで定義できることに注意してください。
サンプル ビュー: About ページ
<% @title = 'About' %>
<% content_for :menu do %>
<%= link_to 'Back to Home', :action => :home %>
<% end %>
We rock!
<% content_for :footer do %>
An Illinois based company.
<% end %>
編集ページ
<% @title = 'Edit' %>
<% content_for :head do %>
<style type='text/css'> .edit_form div {display:inline-block;} </style>
<% end %>
<% form_for :thing, :html => {:class => 'edit_form'} do |f| %>
...
<% end %>
データを入れたい歩留まりを組み合わせて一致させることができ、レイアウトファイルcontent_for :something
のマッチングに挿入されます。yield :something
パーシャルでも機能します。パーシャルは独自の content_for :something ブロックを挿入でき、他の content_for 呼び出しで追加されます。