Foros del Web » Programando para Internet » Ruby »

render(:partial => "menu") me dice q nill

Estas en el tema de render(:partial => "menu") me dice q nill en el foro de Ruby en Foros del Web. creo q esto de los objetos no lo tengo muy claro: estoy haciendo unos test modificando codigos de ejemplo y me encuentro con un problema ...
  #1 (permalink)  
Antiguo 18/10/2006, 19:32
 
Fecha de Ingreso: agosto-2006
Mensajes: 316
Antigüedad: 17 años, 8 meses
Puntos: 0
render(:partial => "menu") me dice q nill

creo q esto de los objetos no lo tengo muy claro:

estoy haciendo unos test modificando codigos de ejemplo y me encuentro con un problema sin lugar a dudas causado por algun concepto mal asumido.

asi q cuando antes lo corrija mejor.

tengo un layout:

<body>
...
<%= render(:partial => "menu") %>
. ...
<%= yield :layout %>
</body>
</html>


_menu.rhtml muestra un listado de todas las empresas q se muestra en el lateral y con un link al edit

<table>
<% for empresa in @empresas %>
<tr>
<td>+<%= link_to empresa.empresa, :action => 'edit', :id => empresa %></td>
</tr>
<% end %>
</table>

este es el controlador, copiado directamente del list
def menu
@empresa_pages, @empresas = paginate :empresas, :per_page => 10
end

el controlador del edit y list no tiene ningun misterio, sacaditos calentitos del scaffold

def list
@empresa_pages, @empresas = paginate :empresas, :per_page => 10
end

def edit
@empresa = Empresa.find(params[:id])
end

el problema es q me da este error si llamo a edit, aunque si llamo a list me va bien:

Código:
You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occured while evaluating nil.each

Extracted source (around line #3):

1: <table>
2:   
3: <% for empresa in @empresas %>
4:   <tr>
5:     <td>+<%= link_to empresa.empresa, :action => 'edit', :id => empresa %></td>
6:   </tr>
lo q pasa es q @empresas esta vacio, pero no llego a comprender si es pq el metodo edit lo pisa (creo q no) o que con el metodo list funciona de churro (pq inicializa la variable por otro lado) pq @empresa esta vacio.
  #2 (permalink)  
Antiguo 19/10/2006, 00:55
 
Fecha de Ingreso: enero-2006
Mensajes: 48
Antigüedad: 18 años, 3 meses
Puntos: 0
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.
__________________
------------------------------
http://www.sobrerailes.com

Última edición por Epaminondas Pantulis; 19/10/2006 a las 01:42
  #3 (permalink)  
Antiguo 19/10/2006, 02:50
 
Fecha de Ingreso: agosto-2006
Mensajes: 316
Antigüedad: 17 años, 8 meses
Puntos: 0
otra vez en la diana,
gracias por tu ayuda, estaba estancado.

ayer lei tu traduccion del tutorial para ordenar tablas con ajax,

y me ha sido de gran ayuda, pq voy a diseñar de forma diferente.

este menu lateral finalmente tendra q ir con ajax, sera una especie desplegable como el de mostrar directorios y archivos.

ya vere como termina.

aunque con vuestra ayuda seguro q bien.
  #4 (permalink)  
Antiguo 19/10/2006, 06:05
 
Fecha de Ingreso: enero-2006
Mensajes: 48
Antigüedad: 18 años, 3 meses
Puntos: 0
Recuerda no abusar de Ajax. ¿Por qué? Los usuarios sin Javascript habilitado puede que no puedan navegar bien por tu web.
__________________
------------------------------
http://www.sobrerailes.com
  #5 (permalink)  
Antiguo 20/10/2006, 03:33
 
Fecha de Ingreso: agosto-2006
Mensajes: 316
Antigüedad: 17 años, 8 meses
Puntos: 0
por eso primero hago la version si ajax y luego la version ajax

y utilizo 2 navegadores uno con jscrip y otro sin.

pero no dare yo lecciones de como hacer las cosas, pues no comence a programar en ajax :- )))
  #6 (permalink)  
Antiguo 02/11/2006, 00:16
pablasso
Invitado
 
Mensajes: n/a
Puntos:
Cita:
Iniciado por tomasulo Ver Mensaje
ayer lei tu traduccion del tutorial para ordenar tablas con ajax,
integrado a rails? link link link
  #7 (permalink)  
Antiguo 02/11/2006, 00:58
 
Fecha de Ingreso: enero-2006
Mensajes: 48
Antigüedad: 18 años, 3 meses
Puntos: 0
Cita:
Iniciado por pablasso Ver Mensaje
integrado a rails? link link link
Aun no puedo ponerlos :)

Busca en mi blog, sobrerailes . com
__________________
------------------------------
http://www.sobrerailes.com
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:48.