Self-join exemple

salut !
j’essaye de faire un self join pour une table “User” , j’ai deux
relations pour les entites de cette meme table : has_many et belongs_to
un enfant ( User ) belongs_to un parent ( User ) , un parent has_many
enfants.

voici le bout de code que j’ai :

class User < ActiveRecord::Base

belongs_to :parent,:class_name => “User”
has_many :enfant,:class_name => “User” ,:foreign_key => “id”

sur ma console je teste la creation d’un parent , d’un enfant et je
joigner le parent à cet enfant.apres un get de l’enfant je peux
recuperer le parent , mais je peux pas recuperer l’enfant d’un aprent :
j’ai comme User le parent lui meme.

qu’est ce qui marche pas dans mon code ? est ce qu’il y a un example
complet pour ce cas ?

merci

has_many :enfant,:class_name => “User” ,:foreign_key => “id”

j’ai pas de Rails sous la main pour tester, mais ca me choque un peu ce
“id” dans le foreign_key. c’est pas “parent_id” qu’il faut mettre ?

gUI

Le 12/03/10 13:29, Anass L. a écrit :

salut !

Bonjour,

class User< ActiveRecord::Base

belongs_to :parent,:class_name => “User”
has_many :enfant,:class_name => “User” ,:foreign_key => “id”
qu’est ce qui marche pas dans mon code ? est ce qu’il y a un example
complet pour ce cas ?

Ta foreign_key doit être le parent_id pour que cela fonctionne.
Par contre avec ta modélisation, un enfant ne peut avoir qu’un seul
enfant, c’est normal ?


Martin C. || fuse
http://www.noremember.org

Guillaume B. wrote:

has_many :enfant,:class_name => “User” ,:foreign_key => “id”

j’ai pas de Rails sous la main pour tester, mais ca me choque un peu ce
“id” dans le foreign_key. c’est pas “parent_id” qu’il faut mettre ?

gUI

meci pour ta reponse , mais meme avec ce changement de la foreign_key
j’ai toujours le meme problem cà d : d’un enfant je peux recupere le
parent, mais à partir de ce parent j’ai comme enfant le parent lui meme.

je comprend pas encore ce qui cloche.

Salut,
Personnellement, j’ai utilisé acts_as_tree, et associé au parent_id,
tout a fonctionné du premier coup.
http://api.rubyonrails.org/classes/ActiveRecord/Acts/Tree/ClassMethods.html

En espérant que ça puisse t’aider :slight_smile:

Le 12/03/10 16:06, Anass L. a écrit :

meci pour ta reponse , mais meme avec ce changement de la foreign_key
j’ai toujours le meme problem càd : d’un enfant je peux recupere le
parent, mais à partir de ce parent j’ai comme enfant le parent lui meme.

je comprend pas encore ce qui cloche.

As tu rechargé l’application ? Tu as exactement le comportement standard
en laissant id en foreign_key.


Martin C. || fuse
http://www.noremember.org

j’ai pas rechargé l’application , j’utilise la console pour mes test
dans ce cas.
j’ai essayé differentes combinaisons mais ça marche pas encore

voici ma migration pour la table Users

class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users do |t|
t.string :nom
t.string :prenom
t.date :dateNaissance
t.string :adress
t.string :email
t.string :role
t.binary :photo

  t.timestamps
end

end

bien sure l’id se cree automatiquement “Id”

voici le model :

class User < ActiveRecord::Base

belongs_to :parent,
:class_name => “User”
has_many :etudiant,
:class_name => “User” ,
:foreign_key => “parent_id”

Bonjour,

2010/3/12 Anass L. [email protected]

bien sure l’id se cree automatiquement “Id”

Oui mais la colonne “parent_id” ne se crée pas toute seule, elle :wink: Il
faut
bien un endroit où stocker, pour chacun de tes users, quel est l’id de
son
parent, non ?

Jean-Baptiste

Le 12/03/10 17:30, Anass L. a écrit :

j’ai pas rechargé l’application , j’utilise la console pour mes test
dans ce cas.

Fais un reload! en console. Si ça ne fonctionne pas, poste ta migration
car il nous manque des informations.


Martin C. || fuse
http://www.noremember.org

oui , c’exactement ce qui manquait , merci pour ton aide
je suis un debutant sur ROR :wink:
mais dans la doc , ils ne precicent pas qu’il faut avoir ces colonnes (
avec du bon sens on comprent que c’est justifié ) , j’ai pensé que ROR
est assez intelligent pour deviner les id :slight_smile:

merci encore.

Le 12 mars 2010 20:58, Anass a écrit :

Hello,

oui , c’exactement ce qui manquait , merci pour ton aide
je suis un debutant sur ROR :wink:
mais dans la doc , ils ne precicent pas qu’il faut avoir ces
colonnes ( avec du bon sens on comprent que c’est justifié ) ,
j’ai pensé que ROR est assez intelligent pour deviner les id :slight_smile:

Rails ne lit pas encore dans les pensées ni n’écrit encore
les migrations automatiquement pour toi.

C’est une feature prévue pour Rails 5.0.

Autant dire qu’il faudra faire preuve d’un peu de patience.

– Jean-François.


http://www.twitter.com/underflow_

http://www.rubyfrance.org