Modulos
Los módulos de la aplicación son las pestañas que se mostrarán para realizar la navegación. Pueden ser asignados a nivel de clase o de instancia.
Modulos a nivel de clase
Deberán ser definidos en la clase ApplicationController y serán comunes a toda la aplicación.
class ApplicationController < ActionController::Base
set_module :productos
set_module :rubros
end
Modulos a nivel de instancia
También pueden ser definidos a nivel de instancia, es decir, en un método de instancia de la clase ApplicationController o alguna de sus subclases.
La diferencia principal, consiste en que de este modo, es posible realizar las definiciones en forma dinámica según los valores que haya en el controller al momento de ejecutarse. Se podrán considerar los valores de la session para determinar el perfil del usuario logueado, el nombre del controller que está siendo llamado, etc.
class ApplicationController < ActionController::Base
def modules
set_module :productos
set_module :rubros
set_module :parametros if @current_user.is_admin?
end
endModulos a nivel de subclases
Disclaimer: Funcionalidad aún no probada.
Como la definición de módulos a nivel de instancia utiliza la nueva funcionalidad de rails delegating_superclass_accessors, es posible definir para cada subclase valores distintos. Ej:
class ApplicationController < ActionController::Base
set_module :productos
end
class UserApplication < ApplicationController
set_module :compras
end
class AdminApplication < ApplicationController
set_module :parametros
end
Esto permitirá que cuando un controller dependa de alguna de estas subclases en particular, utilice los módulos correspondientes.
Sintaxis para la definición de módulos
El método set_module toma como parámetros el nombre de módulo a definir y opcionalmente un hash de opciones. El hash de opciones permite reemplazar los siguientes valores por defecto:
:caption = Nombre a mostrar en la pestaña. Por defecto se toma el nombre del módulo en formato "humanized".
:url = Dirección del enlace en la pestaña. Por defecto se crea un enlace al index del controller con nombre igual al del módulo.
Ej:
set_module :productos, :caption => 'Articulos', :url => activos_productos_url()