私は、レイアウトの歩留まりを次のようにすることを好みます。
<html>
<!-- other stuff -->
<body>
<!-- other stuff -->
<%= yield :javascript %>
</body>
</html>
次に、ビューで次のように記述できます。
<% content_for :javascript do %>
<script type='text/javascript'>
function doMagic() {
//Mind-blowing awesome code here
}
</script>
<% end %>
<!-- More view Code -->
<%= render :partial => "sub_view_with_javascript" %>
また、部分的な _sub_view_with_javascript.html.erb では、次のようにも記述できます。
<% content_for :javascript do %>
<script type='text/javascript'>
function DoMoreMaths() {
return 3+3;
}
</script>
<% end %>
このアプローチの理由は、yield と content_for が別のファイルにあるからです。すべての content_for にスクリプト タグを挿入するのは DRY ではありませんが、シンタックス ハイライターが各ファイルの言語の変更を認識できるようになり、その点で役立ちます。
同じシンボル (この場合は :javascript) に対して 1 つのファイルに複数の content_for 呼び出しがある場合、それらをすべて一番上のものに統合することを検討しますが、パーシャルでの使用には最適です。
そして、HTML は、必要な数のスクリプト ブロックを完全に満足しています。唯一の落とし穴は、firebug などの開発者ツールでコードを操作する場合、関数に適したスクリプト ブロックを見つけるのに少し時間がかかることです。これは、デバッグする JavaScript ブレークポイントを設定する必要がある場合にのみ発生します。