c'è un altro possibile modo per farlo: nidificati Layout
non ricordo dove ho trovato questo codice in modo scuse all'autore originale.
creare un file chiamato nested_layouts.rb nella cartella lib e includere il seguente codice:
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
quindi, creare i diversi layout nella cartella layout, (ad esempio 'admin.rhtml' e 'l'applicazione .rhtml ').
Ora nel tuo controller aggiungere questo solo all'interno della classe:
include NestedLayouts
E, infine, alla fine delle vostre azioni fare questo:
def show
...
render :layout => ['admin','application']
end
l'ordine dei layout nella matrice è importante . Il layout dell'amministratore verrà reso all'interno del layout dell'applicazione ovunque sia lo 'yeild'.
questo metodo può funzionare molto bene a seconda del design del sito e di come sono organizzati i vari elementi. per esempio, uno dei layout inclusi potrebbe contenere solo una serie di div che contengono il contenuto che deve essere mostrato per una determinata azione, e il CSS su un layout più alto potrebbe controllare dove sono posizionati.
fonte
2008-10-01 12:45:21
come nel rendering: partial => 'navigation', giusto? – webmat
sì, qualcosa come render: partial => 'section1_subnav' –