Forum: Rails-ES Modelo para un join

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Esteban (Guest)
on 2007-01-03 23:58
(Received via mailing list)
Hola foro

Tengo un query que retorna información que debo insertar en otra tabla.
Este query se compone de un join de 2 tablas (tabla1 y tabla2). Sé que
para ejecutarlo debo usar find_by_sql, mi pregunta es: importa bajo cual
modelo lo ejecute?

Puedo hacer tanto Tabla1.find_by_sql(...) o Tabla2.find_by_sql(...) o
acaso tengo que hacer una vista con solo las columnas que retorna este
query y hacerle su modelo en Rails? Tabla1JoinTabla2.find_by_sql(...)?

Saludos
Juan Lupión (Guest)
on 2007-01-04 11:20
(Received via mailing list)
"Puedo hacer tanto Tabla1.find_by_sql(...) o Tabla2.find_by_sql(...) o
acaso tengo que hacer una vista con solo las columnas que retorna este
query y hacerle su modelo en Rails? Tabla1JoinTabla2.find_by_sql(...)?"

find_by_sql() se supone que devuelve un Array con objetos de la clase
del
modelo.  Si usas Tabla1.find_by_sql deberás asegurarte que la query
devuelve
registros de la clase Tabla1.   Si devuelve otra cosa me imagino que
más pronto o más tarde tendrás alguna excepción.

Así que me parece más plausible lo de crear una nueva clase modelo para
lo
que tedevuelva esa query, pero también me parece un artificio que no sé
si es
del todo necesario,  igual si replanteas tus modelos puedes conseguir
un diseño de la BD más elegante.
Hernan F. (Guest)
on 2007-01-06 20:17
(Received via mailing list)
Hola,
Técnicamente podes hacer esto:
datos = tabla1.find_by_sql("select * from tabla2")
no importa desde que modelo lo ejecutes, tenes que tener en cuenta que
el
objeto que te crea AR va a ser con respecto a tabla2.
No hace falta una vista para esto, si solo es pasar los datos de un
tabla a
otra, con hacerlo dentro del controller o en la clase del modelo va a
funcionar bien.

Es muy fácil investigarlo y probarlo desde la consola, te lo recomiendo
para
este tipo de dudas.

Saludos
This topic is locked and can not be replied to.