Seleccionar layout dinamicamente
Junio 24, 2006
Cuando desarrollamos una aplicacion web, es muy comun que tengamos una parte para el administrador y otra habilitada para los visitantes de la web. En Ruby on Rails, generalemente esto esta diferenciado por los controladores, y cada uno utiliza un layout determinado.
Pero que pasa si hay un controlador que da funcionalidad a las dos partes, por ejemplo un controlador search que nos da la posibilidad de realizar busquedas, puede ser utilizado desde la web y desde la administracion. El problema aca es que al controlador se le asigna un layout, y para nuestro caso no deberia ser el mismo para el administrador que para nuestros visitantes.
Asi que aqui voy a dejar un metodos que he utilizado para solucionar este problema, y otro para cuando el layout que desamos mostrar depende del metodo que estamos ejecutando.
Diferenciar entre admin y web
Aqui vmos a seleccionar el layout dependiedo si estamos logeados o no en el sistema, esta de mas decir que admin es para cuando lo estamos y web para cuando no.
En el controlador que vamos a seleccionar el layot dinamicamente colocamos:
layout :seleccionar_layout
Y tenemos que definir el metodo seleccionar_layout en el mismo controlador o en aplication si lo vamos a utilizar mas de una ves. El metodo serias asi:
def seleccionar_layout
if logged_in?
'admin'
else
'web'
end
end
Hay que tener en cuenta que el metodo logged_in? nos debe de indicar si estamos loggeados en el sistema o no. Este metodo es del plugin acts_as_authenticated.
Diferenciar entre metodos del mismo controller
Ahora haremos un metodo que selecciona el layout dependiendo del metodo que estemos llamando. Y aqui esta:
def seleccionar_layout
case action_name
when 'list' : 'layout_list'
when 'new' : 'layout_new'
when 'edit' : 'layout_edit'
end
end