En el controlador llamo a 'has_many y creo una nueva asociación, con una
condición'.  Algo así:

Usuario.has_many "laquepreciso".to_sym,:class_name => '...',:conditions =>
'XYZ'

Más vale hacelo en el modelo no?

¡Si pudiera!  La cosa real es:

Idioma(id,código iso)
Archivo: tiene muchas frases
Frases: tiene un archivo, muchas traducciones
Traducción: (código_iso) pertenece a una frases

El usuario selecciona un archivo y un idioma (puede haber cientos) y yo 
necesito traer la lista de frases y sus traducciones.  Si no hay traducción 
aparece un campo en blanco para entrarla, si hay la muestra.  En realidad es 
más complejo, pero con eso da para el problema.

- Una opción era iterar en la vista, disparando una consulta por cada frase, 
buscando si había traducción o no.  Pero en páginas de cincuenta traducciones 
eran cincuenta consultas más a la base.  Y durante la exportación a otros 
formatos era todavía más.

- La otra opción era hacer un :include de :traducción para que la vista ya 
tuviera todo ahí, a la mano y no disparar más consultas a la base.

Quedarla - (en) NULL
Un perro - (en) A dog
          (fr) Un chien (ésta no la quiero)

El :include de :traducción sólo trae las traducidas, no las que no tienen nada, 
salvo que haga el join, en cuyo caso sí, me deja en null las no traducidas (el 
orden de las frases tiene algo que ver, sino leía primero las traducidas y 
después la no traducidas).

Pero el join me traía todas las traducciones de todos los idiomas porque la 
única condición era la de la foreign_key.  Al agregar al join la condición del 
idioma entonces tengo lo que quería, una lista así:

frase traducida, traducción
frase no traducida, NULL (ojo, no traducida en el idioma en cuestión).

La asociación que agrego pone la condición del idioma.  No sé cuál va a ser el 
idioma que el usuario va a seleccionar, ni cuántos va a haber en la base 
después de un tiempo, entonces no puedo ponerlo en el modelo.  El lambda 
pintaba bien, es muho mejor solución porque se ve en el modelo (y ahí sería una 
sola asociación, pero paramétrica), pero no supe cómo resolverlo :(

Eduardo.
_______________________________________________
Ruby mailing list
[email protected]
http://lista.rubyargentina.com.ar/listinfo.cgi/ruby-rubyargentina.com.ar

Responder a