Foros del Web » Programando para Internet » Ruby »

Mi primer aplicacion

Estas en el tema de Mi primer aplicacion en el foro de Ruby en Foros del Web. Hola compañeros, una consulta. Estoy iniciandome y tengo una pequeña aplicación Tenemos una duda con Ruby. Hemos hecho una clase con un método para hacer ...
  #1 (permalink)  
Antiguo 18/04/2008, 15:50
 
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años, 7 meses
Puntos: 0
Pregunta Mi primer aplicacion

Hola compañeros, una consulta. Estoy iniciandome y tengo una pequeña aplicación

Tenemos una duda con Ruby. Hemos hecho una clase con un método para hacer la consulta, lo llamamos desde el controler y mostramos el resultado en la vista. Sé que los llamados están bien porque ya lo probamos y la consulta SQL también está probada.

El error que nos sales es que nos estada devolviendo un nil, pero no sabemos porque.

Creo que lo que nos falta es el mapeo del resultado de la consulta a la clase.

Modelo:

class ProjectTimeReport
class << self

def create_report
@report = ProjectTimeReport.find_by_sql "SELECT e.EMPNAME,t.TIMEACTDATE, t.TIMEACTDURATION, t.TIMEACTNOTE, t.TIMEACTTYPE, c.CUSJOBNAME
FROM TIMEACT t , CUSTOMERJOB c , EMPLOYEE e
WHERE t.TIMEACTJOB = c.CUSJOBLISTID AND
t.TIMEACTJOB = '3700000-1136566007' AND
t.TIMEACTEMP =e.EMPLISTID AND
t.TIMEACTDURATION <> 0
Order BY e.EMPNAME, t.TIMEACTDATE"
end
end
end

Control

def project_time_report
@report = ProjectTimeReport.new hola
@report.resource = "ruddy vargas"

#@employees = Employee.find(:all)

respond_to do |format|
format.html # project_time_report.html.erb
format.xml { render :xml => @report}
end
end

vista

<tr>
<td><%=h @report.EMPNAME %></td>
</tr>

El error:

Showing reports/projectTimeReport.html.erb where line #14 raised:

You have a nil object when you didn't expect it!
The error occurred while evaluating nil.EMPNAME

Extracted source (around line #14):

11:
12:
13: <tr>
14: <td><%=h @report.EMPNAME %></td>
15: </tr>
16:
17:
  #2 (permalink)  
Antiguo 22/04/2008, 07:56
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Mi primer aplicacion

porque en el modelo pones class << self???, no seria mejor dejarlo sin eso??

en el controlador estas creadon un record nuevo por lo tanto tienes que dar un save:
@report.save

prueba a ver..
__________________
-----------------------------
Edgar Gonzalez
  #3 (permalink)  
Antiguo 22/04/2008, 09:36
 
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Mi primer aplicacion

Gracias eagoweb2.

Veamos si me explico mejor.

Tengo estos Modelos: Employee y Customer
Cada uno tiene su vista y su controlador.

Yo quiero crear un reporte. Entonces tengo la vista y el controlador para el reporte. Tambien he creado una clase llamada report
Esta clase report no tiene una tabla que se relacione con ella. Lo que tengo es un query que me extrae información de las dos tablas.

Ahora mi problema es que no se como pasarle el resultado de la consulta a la clase report.

Veamos. la consulta me trae algo como EMPNAME, CUSTOMERID

son datos de diferentes tablas que los quiero almacenar en un solo objeto y luego en la vista accesarlos.

Muchas gracias.
  #4 (permalink)  
Antiguo 22/04/2008, 13:23
 
Fecha de Ingreso: abril-2008
Mensajes: 21
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Mi primer aplicacion

Hola ruddy, en la clase ProjectTimeReport creas un metodo de clase "create_report", pero no lo invocas, deberias reemplazar esto:

@report = ProjectTimeReport.new hola

por:

@report = ProjectTimeReport.create_report

Otra cosa, en la sentencia SELECT que empleas no seleccionas el campo "resource", por tanto no tendras disponible ese atributo en el objeto cuando quieras asignarle un valor, al menos que sea un atributo virtual que lo hayas definido con:

attr_accesor :recource

Saludos.
  #5 (permalink)  
Antiguo 22/04/2008, 14:24
 
Fecha de Ingreso: septiembre-2003
Mensajes: 384
Antigüedad: 21 años, 2 meses
Puntos: 0
Re: Mi primer aplicacion

Bueno fiajte yo lo haría de la siguiente manera:

tengo mi MVC the Employee y Customer

y solo un controlado de reporte

dentro de ese controlado del reporte defino un metodo

def ver_reporte
// aqui adentro la relacion que quieras hacer de tus otras dos tablas
end

por lo tanto tengo que añadir una vista que se llame ver_reporte.html.erb ó ver_reporte.rhtml :s


el problema puede que esté en la consulta SQL que estas haciendo, ya que no veo ningun parametro que le estés pasando....


Por otro lado no estas usando los 'has_many, belongs_to'??
__________________
-----------------------------
Edgar Gonzalez
  #6 (permalink)  
Antiguo 23/04/2008, 15:01
 
Fecha de Ingreso: abril-2008
Mensajes: 5
Antigüedad: 16 años, 7 meses
Puntos: 0
Re: Mi primer aplicacion

Si tengo los belongs_to y los has_many pero la BD es heredada, no podemos correr la migración.

Al hacer esta consutla con el :conditions va a buscar time_id y no existe

@report = Employee.find(:all,
:conditions => ['EMPNAME LIKE ?', '%vargas'],
:include => [:timeact]
)

Da este error:

Mysql::Error: #42000Not unique table/alias: 'EMPLOYEE': SELECT `EMPLOYEE`.`EMPLISTID` AS t0_r0, `EMPLOYEE`.`EMPNAME` AS t0_r1, `EMPLOYEE`.`SSN` AS t0_r2, `EMPLOYEE`.`TYPE` AS t0_r3, `EMPLOYEE`.`CUSJOB` AS t0_r4, `EMPLOYEE`.`SPACEUSED` AS t0_r5, `EMPLOYEE`.`ACTIVE` AS t0_r6, `EMPLOYEE`.`RELEASEDDATE` AS t0_r7, `EMPLOYEE`.`LOGINNAME` AS t0_r8, `TIMEACT`.`TIMEACTDATE` AS t1_r0, `TIMEACT`.`TIMEACTJOB` AS t1_r1, `TIMEACT`.`TIMEACTEMP` AS t1_r2, `TIMEACT`.`TIMEACTTASK` AS t1_r3, `TIMEACT`.`TIMEACTTYPE` AS t1_r4, `TIMEACT`.`TIMEACTDURATION` AS t1_r5, `TIMEACT`.`TIMEACTNOTE` AS t1_r6 FROM `EMPLOYEE` LEFT OUTER JOIN `TIMEACT` ON `TIMEACT`.TIMEACTDATE,TIMEACTJOB,TIMEACTEMP,TIMEAC TTASK,TIMEACTTYPE = `EMPLOYEE`.timeact_id WHERE (EMPNAME LIKE '%vargas')

Me parece que es por no tener el timeact_id, por no correr la migración.

Entonces con este otro query:

@report = Employee.find(:all,
:conditions => ['EMPNAME LIKE ?', '%vargas'],
:joins => "left join TIMEACT ON (EMPLOYEE.EMPLISTID = TIMEACT.TIMEACTEMP)"
)

Si obtengo todos los Employee y los datos de timeact, pero como la consulta la hago con el modelo Employee, ruby me deja los datos del empleado en employee pero no se donde quedan los datos del timeact.

O existe alguna forma para hacer una consulta de dos o mas tablas y que pueda ver todos los datos retornados.

Se me ha ocurrido hacer dos o mas consultas por separado e ir almacenando en una lista, pero no estoy seguro.

gracias.
ruddyvar [email protected]
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 10:10.