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?