2009-08-13 14 views

risposta

0

decidono il layout nel controllore piuttosto che il modello. Il tuo ProjectController può utilizzare il proprio ProjectLayout e MessagesController può quindi utilizzare il layout normale se lo desideri.

2

È possibile applicare solo i layout a livello di controller:

class MessagesController < ApplicationController 
    layout :project 
end 

Layout method documentation ha un esempio su come fare layout condizionali

2

Inoltre, dal momento che la questione non è chiara, è anche possibile impostare il layout per il solo una azione con l'opzione di rendering.

render :action => 'new', :layout => 'layoutname' 
16

questo può aiutare

class MessagesController < ApplicationController 
    layout :get_layout 

    def get_layout 
    @project? ? 'ProjectLayout' : 'NormalLayout' 
    end 

end 
1

È possibile applicare solo i layout rotaie a controller livello ed individuali action livelli.

il layout unico in per ogni controller

class MessagesController < ApplicationController 
    layout "admin" 

    def index 
    # logic 
    end 
end 

** La linea layout "admin" sopra caricherà il layout di amministratore ogni volta che il regolatore di messaggio viene invocato. Per questo, è necessario disporre di un layout creato nel file layouts/admin.html.rb. **

il layout dinamico per ogni controller

class MessagesController < ApplicationController 
    layout :dynamic_layout 

    def index 
    # logic 
    end 

protected 
def dynamic_layout 
    if current_user.admin? 
     "admin"  # Show admin layout 
    else 
    "other_layout" # Show other_layout 
    end 
    end 
end 

# singola azione Livello layout Se si desidera visualizzare diversi layout per ogni azione puoi farlo.

class MessagesController < ApplicationController 
    layout :dynamic_layout 

    def index 
    # logic 
    render :action => 'index', :layout => 'index_layout' 
    end 

    def show 
    # logic 
    render :action => 'show', :layout => 'show_layout' 
    end 
end 
0

I miei due centesimi in ApplicationController:

before_action :layout_by_action 

@@actions = %w(new edit create update index) 

def layout_by_action 
    if @@actions.include? params[:action] 
    self.class.layout 'admin' 
    else 
    self.class.layout 'application' 
    end 
end 
Problemi correlati