[Ror-es] Auto-relación simétrica
Diego Algorta Casamayou
Wed Feb 15 13:29:36 GMT 2006
Diego Algorta Casamayou escribió:
> Sergio Gil Pérez de la Manga escribió:
>> El día 14/02/06, Diego Algorta Casamayou
>> > escribió:
>>
>> Otra forma sería redefinir el método << y ahí mismo, cada vez que le
>> agregan un contacto B al contacto A, este mismo se agrega al con
>> tacto
>> B. Cuidado porque podés quedar en loop. Para evitarlo, antes de que A
>> intente agregarse en los contactos de B, fijate si ya está agregado.
>>
>>
>> ¡Qué buena idea! Un PHPero no se acostumbra a que en Ruby los
>> operadores son simplemente métodos que se pueden redefinir :)
>>
>> Bueno, pues manos a la obra, a ver si soy capaz....
>
> No lo probé... pero creo que esto funcionaría y sería MUCHO más
> performante que el uso del filtro before_save pues no necesita recorrer
> todos los contactos sino sólo los afectados:
>
> class Contact < ActiveRecord::Base
> def <<(contact)
> # Agrego el contacto igual que hasta ahora utilizando
> # el << tradicional.
> super(v)
Perdón... esto debería ser: super(contact)
> # Ahora me fijo si el contacto ya me tiene entre sus contactos.
> if !contact.contacts.include?(self)
> contact.contacts << self
> contact.save
> end
> end
> end
>
> Saludos,
> Diego
>
> _______________________________________________
> Ror-es mailing list
>
>
>