Я бы предпочел, чтобы выход макета выглядел так:
<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='test/javascript'>
function DoMoreMaths() {
return 3+3;
}
</script>
<% end %>
Мое обоснование этого подхода заключается в том, что yield и content_for находятся в разных файлах. Не СУЩЕСТВЕННО вставлять тег script для каждого content_for , но он позволяет подсветке синтаксиса распознавать изменение языка в каждом файле и помогает мне в этом.
Если у вас есть несколько вызовов content_for в одном файле к одному и тому же символу (в нашем случае: javascript), я бы посоветовал объединить их все в верхний, но он идеально подходит для использования с частями.
И HTML очень рад иметь столько блоков скриптов, сколько вы хотите. Единственное возможное затруднение - при работе с кодом в инструментах разработчика, таких как firebug, требуется немного больше времени, чтобы найти правильный блок скрипта для вашей функции. Это происходит только для меня, когда мне нужно установить точку останова javascript для отладки.