hay otra manera posible de hacer esto: Diseños anidados
No recuerdo donde encontré este código para disculpas al autor original.
crear un archivo llamado nested_layouts.rb en la carpeta lib e incluir el siguiente código:
module NestedLayouts
def render(options = nil, &block)
if options
if options[:layout].is_a?(Array)
layouts = options.delete(:layout)
options[:layout] = layouts.pop
inner_layout = layouts.shift
options[:text] = layouts.inject(render_to_string(options.merge({:layout=>inner_layout}))) do |output,layout|
render_to_string(options.merge({:text => output, :layout => layout}))
end
end
end
super
end
end
a continuación, crear sus varios diseños en la carpeta de diseños, (por ejemplo, 'admin.rhtml' y 'aplicación .rhtml ').
Ahora en sus controladores de añadir esta justo dentro de la clase:
include NestedLayouts
Y, por último, al final de sus acciones hacer esto:
def show
...
render :layout => ['admin','application']
end
el orden de los diseños de la matriz es importante . El diseño del administrador se representará dentro del diseño de la aplicación dondequiera que esté el 'yeild'.
este método puede funcionar muy bien dependiendo del diseño del sitio y cómo se organizan los diversos elementos. por ejemplo, uno de los diseños incluidos podría contener una serie de divs que contienen el contenido que debe mostrarse para una acción en particular, y el CSS en un diseño más alto podría controlar dónde están posicionados.
como en render: parcial => 'navegación', ¿verdad? – webmat
sí, algo así como render: partial => 'section1_subnav' –