2009-08-13 15 views

Respuesta

0

Decidir la disposición en el controlador en lugar entonces el modelo. Su ProjectController puede usar su propio ProjectLayout y MessagesController puede usar el diseño normal si lo desea.

2

Sólo puede aplicar diseños a nivel de controlador:

class MessagesController < ApplicationController 
    layout :project 
end 

Layout method documentation tiene un ejemplo de cómo hacer diseños condicionales

2

Además, dado que la cuestión no está clara, también se puede configurar la presentación por sólo una acción con la opción de renderizado.

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

esto puede ayudarle a

class MessagesController < ApplicationController 
    layout :get_layout 

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

end 
1

Sólo se pueden aplicar las disposiciones de carriles en controller nivel y action niveles individuales.

diseño único para cada controladora

class MessagesController < ApplicationController 
    layout "admin" 

    def index 
    # logic 
    end 
end 

** La línea layout "admin" anterior cargará el trazado de administración cada vez que el controlador de mensaje se invoca. Por eso, usted debe tener un diseño creado en su archivo layouts/admin.html.rb. **

diseño dinámico para cada controlador

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 

# individuales acción de alto nivel Presentaciones Si desea mostrar los diferentes diseños para cada acción puede hacer eso.

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

Mis dos centavos en 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 
Cuestiones relacionadas