2009-03-25 4 views
1

Est-il possible de faire quelque chose comme ceci:Plus d'une mise en page pour un contrôleur

class SimulationController < ApplicationController 
    layout "generic", :only => [:login, :invalid] 
    layout "menubar", :except => [:login, :invalid] 

Pour une raison quelconque, ma page login utilise encore la mise en page de la barre de menu (je peux dire parce qu'une barre de menu apparaît à la Haut). Si je commente la troisième ligne, la barre de menu disparaîtra. Il semble donc que les deux dispositions sont appliquées les unes après les autres.

Mais si je commente le bit layout "generic", je serai juste noir et blanc, ce qui signifie qu'aucune feuille de style CSS n'est appliquée.

Répondre

0

Une façon de le faire est réellement dans vos actions.

def login 
    render :action => "login", :layout => "generic" 
end 

Vous pouvez aussi faire la réelle « menuBar » html une vue partielle et tourner le rendu hors sous certaines conditions.

5

Vous semblez vouloir appliquer différentes dispositions dans différentes conditions d'exécution. La manière la plus simple d'y remédier consiste à utiliser une référence de méthode pour la mise en page.

Par exemple: -

class ResourceController < ActionController::Base 
    layout :choose_layout 

    private 
    def choose_layout  
     if [ 'signup', 'login' ].include? action_name 
     'login_layout' 
     else 
     'admin_layout' 
     end 
    end 

Vérifiez les Rails API reference pour ActionController :: Mise en page sous la rubrique "Types de mise en page"