Consulta en relación 1:1

Tengo dos modelos: A y B
Entre ellos hay una relación 1:1, donde todos los elementos de B están
relacionados con alguno de A, pero NO todos los de A están relacionados
con
alguno de B. Por esto, B contiene un campo ‘a_id’.

Necesito listar todos los elementos de A que no tienen relación con B.

Una posible SQL que se me ha ocurrido es: “select * from A left join B
on
B.a_id is null”

Pero me gustaría algo más RoR, algo del estilo A.find_all_by_*…

¿Alguna sugerencia?

Pero me gustaría algo más RoR, algo del estilo A.find_all_by_*…

¿Alguna sugerencia?

Se me acaba de ocurrir otra:
A.find :all, :include => :B, :conditions => ‘a_id is null’

Me sigue sin parecer demasiado buena, seguro que hay alguna manera mas
bonita ¿que os parece?

On Aug 27, 2007, at 12:01 PM, Paco García wrote:

Se me acaba de ocurrir otra:
A.find :all, :include => :B, :conditions => ‘a_id is null’

Me sigue sin parecer demasiado buena, seguro que hay alguna manera
mas bonita ¿que os parece?

Es lo suyo, otra opcion seria ir de B a A de este modo:

B.find_all_by_a_id(nil).map(&:a)

pero creo que me gusta menos. Si busco As me gusta partir de A por lo
general.

– fxn

On 27/08/07, Paco García [email protected] wrote:

Se me acaba de ocurrir otra:
A.find :all, :include => :B, :conditions => ‘a_id is null’

Me sigue sin parecer demasiado buena, seguro que hay alguna manera mas
bonita ¿que os parece?

Si sacas eso del controlador y lo metes como un método “find_orphans”
del modelo A, te queda bastante bien :slight_smile:


Manuel, que
piensa que eres una excelente persona y medra en torno a
http://simplelogica.net y/o http://simplelogica.net/logicola/
Recuerda comer mucha fruta y verdura.

Manuel González Noriega
escribió:> Si sacas eso del controlador y lo metes como un método “find_orphans”

del modelo A, te queda bastante bien :slight_smile:

+1 al comentario de Manuel, me gusta recubrir esos find’s con nombres
descriptivos en los modelos porque hace el código mucho más legible y
fácil de reutilizar.

Saludos,
Raul M.