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

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: