2012-04-15 15 views
8

he definido en mi Users_controller:renderizado correctamente varios diseños por controlador en Rails

layout "intro", only: [:new, :create]

Esto es lo que se ve mi diseño como: Intro.html.haml

!!! 5 
%html{lang:"en"} 
%head 
    %title Intro 
    = stylesheet_link_tag "application", :media => "all" 
    = javascript_include_tag "application" 
    = csrf_meta_tags 
%body{style:"margin: 0"} 
    %header 
    = yield 
    %footer= debug(params) 

Cuando renderizo una página que llama a intro como el diseño, se anida dentro de mi application.html.haml archivo que no es bueno.

¿Hay alguna manera de evitar este anidamiento indeseable de diseños?

¡Gracias de antemano!

Respuesta

41

El problema estaba en mi controlador. Yo estaba declarando varias instancias de diseño de este modo:

class UsersController < ApplicationController 
    layout "intro", only: [:new, :create] 
    layout "full_page", only: [:show] 
    ... 
end 

No haga esto! La segunda declaración tendrá prioridad y no obtendrá el efecto deseado.

En cambio, si los diseños son simplemente una acción específica, simplemente declarar que dentro de la acción como esta:

def show 
... 
render layout: "full_page" 
end 

O bien, si es un poco más complejo, se puede utilizar un símbolo de diferir el procesamiento de un método en tiempo de ejecución como este:

class UsersController < ApplicationController 
    layout :determine_layout 
    ... 

    private 
    def determine_layout 
     @current_user.admin? ? "admin" : "normal" 
    end 
end 
+0

¡Gracias! ¡Salvó mi cara! –

Cuestiones relacionadas