content_forの挙動
Rails 3 になってから、content_forの挙動が少し変わった。
Rails 2までの動きだと
<% content_for :title do -%> トップページ <% end -%>
という感じでタイトルを各ビューごとに変更するような作りの場合
レイアウトのhtml.erbでは、
<title><%= yield(:title) || 'デフォルトのトップページ' %></title>
とやると、各ビューの方でcontent_for指定しなかった場合にyield(:title)がnilになるので「デフォルトのトップページ」というタイトルになるのだが
Rails 3 では、ここでyield(:title)の結果が空文字で返されるため、タイトルが設定されなくなる。
yield(:title)をnilチェックする処理を書けば問題無いが、Rails 3には、content_forを判定するメソッドが出来てるのでそれを使う。
<%= content_for?(:title) ? yield(:title) : 'デフォルトのトップページ' %>