![]() |
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: |
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.. |
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. |
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. |
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'?? |
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] |
| La zona horaria es GMT -6. Ahora son las 10:03. |
Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.