El otro día vi un Railscast sobre el content_for y sus posibilidades, y la verdad es que me gustó mucho. Voy a explicarlo con un ejemplo, porque la teoría no me la sé.

Imaginad que tenemos una acción de un controlador que requiere de una hoja de estilos especial, o de un Javascript especial, o que incluye un feed que el resto de acciones no tienen.

Para este tipo de casos podemos utilizar un bloque content_for y dejar algo muy limpio.

La vista de la acción podría ser así:


<% content_for :head do -%>
<%= javascript_include_tag :my_specific_javascript %>
<% end -%>
<h2>Cabecera de la vista</h2>
Contenido contenido contenido....

Y en el layout simplemente debemos de incluír la llamada al bloque :head, tal que así:


<html>
<head>
 <title>Mi title</title>
 <%= javascript_include_tag :defaults %>
 <%= yield :head %>
</head>
<body>
  <%= yield %>
</body>
</html>

Lo bueno, es que el yield :head carga un contenido específico para cada acción que lo definamos, y si no lo definimos no carga nada. Lo cuál evita enguarrar el layout con ifs a tutiplén.

Lo malo es tener que incluír los requisitos de CSS, Javascript o lo que sea en la propia vista de una acción, que no me resulta del todo elegante.

¿Qué pensáis?