Forum: Rails-ES relacion 1 a n con ella misma

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.
94ac01209314464490a94b47f051be0b?d=identicon&s=25 Aitor (Guest)
on 2007-05-31 11:04
Hola, alguien ha implementado una relación de una tabla consigo misma?
como se comporta o lo trata rails en este tipo de relaciones?

La razón de esta relación es la siguiente, en una tabla usuarios, hay
usuarios que son responsables de otros usuarios por eso la idea de poner
la clave foranea dentro de la misma tabla (uno a muchos con ella misma),
quedando algo así:

+ usuarios
  . id
  . usuario_id
  . nombre

seria suficiente con poner un has_many :usuarios dentro del modelo
usuario? o al ser una relación un tanto peculiar hay que indicarle a
Rails otra forma de tratarla?

Gracias por la ayuda que puedan facilitarme.
Un saludo.
Aitor

PD. si este tipo de relaciones es mejor evitarlas, cualquier otra idea
es bienvenida. gracias de nuevo.
1f2eadfb41362800ebc2cf211b91d0f7?d=identicon&s=25 javier ramirez (Guest)
on 2007-05-31 11:18
(Received via mailing list)
Hola,

> La razón de esta relación es la siguiente, en una tabla usuarios, hay
> usuarios que son responsables de otros usuarios por eso la idea de poner la clave 
foranea dentro de la misma tabla (uno a muchos con ella
> seria suficiente con poner un has_many :usuarios dentro del modelo
> usuario? o al ser una relación un tanto peculiar hay que indicarle a
> Rails otra forma de tratarla?
>
Funciona bien con un has_many y un belongs_to en el modelo. Pero por el
mismo precio le pones un acts_as_tree y tienes algo de funcionalidad
adicional, como por ejemplo recorrer el árbol hacia arriba, hacia abajo
y en horizontal.

Si necesitas recorrer las ramas del árbol en varios niveles acts_as_tree
no es tu mejor opción porque hace una query por nivel (puedes usar eager
loading para un par de niveles, pero si tienes muchos no es una opción),
siempre puedes tirar de acts_as_nested_set, que penaliza los
inserts/updates/deletes pero está optimizado para consultas.

> PD. si este tipo de relaciones es mejor evitarlas, cualquier otra idea
> es bienvenida. gracias de nuevo.
>
No hay motivo para evitar estas relaciones. Son muy normales en
cualquier aplicación.

Saludos,

javier ramirez
94ac01209314464490a94b47f051be0b?d=identicon&s=25 Aitor (Guest)
on 2007-05-31 11:44
Muchas gracias Javier por indicarme las posibles soluciones para empezar
a buscar e informarme.

Un saludo.
Aitor
This topic is locked and can not be replied to.