El error es ese: @empresas está vacío porque en el controlador la acción edit sólo carga @empresa. Lo que viene a sugerir que edit se debe invocar mediante una URL del tipo .../edit/XX siendo XX la empresa.
Entonces, ¿cuál es el problema?
Pues que cuando vas a pintar la vista resultante d ela acción edit, Rails tiene que pintar todo el layout. Lo que implica (por el render :partial ) que va a pintar _menu.rhtml, y éste espera que exista todo el array de empresas, que el controlador no ha inicializado.
Las modificaciones que has hecho al layout de tu aplicación requieren que cada acción del controlador extraiga el array de empresas para poder pintar sus elementos en el menu.
Así que un primer paso es poner @empresas = Empresa.find(:all) en la acción edit de tu controlador y debería funcionar.
Y además esto deberías hacerlo en todas las acciones de tu aplicación, claramente violando el principio de no repetición (DRY). La solución sería meter un before_filter en tu controlador, alg odela guisa de
Código:
class ... < ActionController:Base
before_filter :rellena_empresas
def edit ...
end
def show ...
end
private
def rellena_empresas
@empresas = Empresa.find(:all)
end
De esta manera el código de rellena_empresas se ejecuta antes de la invocación de cada acción de tu controlador.