Quizás haya una razón técnica/de implementación para ello, pero me parece que el "diseño" es tan claramente parte de la capa de vista como puede ser, sin embargo, parece que Rails solo permite especificar el diseño en un nivel de controlador.¿Por qué Rails hace de la selección de diseño una preocupación del controlador en lugar de una preocupación de vista? ¿Puedo elegir un diseño desde una vista?
Mi controlador no debería preocuparse por los diseños ... las plantillas deberían. ¿Hay alguna forma de especificar qué diseño usar dentro del archivo .erb?
Algo así como:
<%= with_layout :news_feed do %>
<p>
My markup in here.
</p>
<% end %>
O cualquier otra aplicación que se pueda imaginar ... pero la documentación sólo parece referirse a la disposición desde la perspectiva del controlador.
Tal vez no sería demasiado difícil implementar un ayudante with_layout
.
EDIT | He encontrado exactamente lo que estaba buscando:
<% render :layout => "some_layout" do %>
<p>
My markup here
</p>
<% end %>
Ahora siempre que su ActionController tiene:
class ApplicationController < ActionController::Base
layout nil
Entonces cada plantilla puede seleccionar su propio diseño, el uso de este enfoque.
Si coloca un diseño en la aplicación/diseños, con un nombre que coincida con el controlador, ese diseño se utilizará, por lo que no tiene que especificar estrictamente si son todos iguales. De cualquier manera, el tio cómo escribe sus plantillas ahora tiene el control total de la misma, no es el tipo que está escribiendo los controladores :)
Gracias, sí, obtuve esto de los documentos, pero parece un poco raro. Nuestro equipo está claramente dividido en diseñadores y desarrolladores, y los diseñadores nunca deberían tener que tocar nuestros controladores. Tal vez nos limitaremos a utilizar un diseño vacío con inclusiones para las partes superior e inferior incluidas por los tipos front-end. O tal vez investigue una solución que permita un bloque 'with_layout'. Tenemos cuatro o cinco diseños "estándar", y no están necesariamente vinculados con ningún controlador específico ... solo depende del contenido de la página. – d11wtq
'<% render: layout =>" some_layout "do%> .... <% end %>;) – d11wtq
@ d11wtq - Veo de dónde vienes, aunque tus diseñadores todavía no necesitarían tocar el código del controlador ¿no? Podrían simplemente crear los diseños en el directorio de diseños y luego los desarrolladores agregarían cualquier código condicional si fuera necesario. En general, sin embargo, probablemente pueda salirse con la suya con el esquema de convención de nomenclatura de controlador el 95% del tiempo. – McStretch