N-n self referring


#1

Bonsoir,

J’ai un petit problème : j’ai une table de players. chaque players peut
avoir un ou plusieurs amis. J’ai donc tout naturellement pensé à faire
une table friends en relation, table avec 2 colonnes de FK id_players si
vous voyez ce que je veux dire.

Le problème c’est que voila, je cherche en gros à faire un scaffold
Friend player:references player:references, mais comme vous vous doutez,
ça ne fonctionne pas.

Que dois-je faire ? Ma modélisation est-elle foireuse ?


#2

Le 16 décembre 2008 00:32, Sylvain P. a écrit :

J’ai un petit problème : j’ai une table de players. chaque players peut
avoir un ou plusieurs amis. J’ai donc tout naturellement pensé à faire
une table friends en relation, table avec 2 colonnes de FK id_players si
vous voyez ce que je veux dire.

Le problème c’est que voila, je cherche en gros à faire un scaffold
Friend player:references player:references, mais comme vous vous doutez,
ça ne fonctionne pas.

Que dois-je faire ? Ma modélisation est-elle foireuse ?

avec un “join model” :

class Friendship < AR::B
belongs_to :player # fk player_id
belongs_to :player2, :foreign_key => ‘player2_id’, :class_name =>
‘Player’
end

class Player < AR::B
has_many :friendships
has_many :friends, :through => :friendships
end

donc ça c’est pour le départ, après tu affines, ça dépend si A
est ami avec B, ça ne signifie pas forcément que B considère
A comme son ami, etc.

– Jean-François.


http://twitter.com/underflow_


#3

Ok, merci. Pour le fait que A considère que B est son ami et
inversement, j’ai un booléen en plus qui permet de valider ou non la
relation. Bon, je viens de tester, ça fonctionne parfaitement :wink: merci
bien.

Jean-François Trân wrote:

Le 16 d�cembre 2008 00:32, Sylvain P. a �crit :

J’ai un petit probl�me : j’ai une table de players. chaque players peut
avoir un ou plusieurs amis. J’ai donc tout naturellement pens� � faire
une table friends en relation, table avec 2 colonnes de FK id_players si
vous voyez ce que je veux dire.

Le probl�me c’est que voila, je cherche en gros � faire un scaffold
Friend player:references player:references, mais comme vous vous doutez,
�a ne fonctionne pas.

Que dois-je faire ? Ma mod�lisation est-elle foireuse ?

avec un “join model” :

class Friendship < AR::B
belongs_to :player # fk player_id
belongs_to :player2, :foreign_key => ‘player2_id’, :class_name =>
‘Player’
end

class Player < AR::B
has_many :friendships
has_many :friends, :through => :friendships
end

donc �a c’est pour le d�part, apr�s tu affines, �a d�pend si A
est ami avec B, �a ne signifie pas forc�ment que B consid�re
A comme son ami, etc.

– Jean-Fran�ois.


http://twitter.com/underflow_


#4

Le 16 décembre 2008 01:13, Sylvain P. a écrit :

Ok, merci. Pour le fait que A considère que B est son ami et
inversement, j’ai un booléen en plus qui permet de valider ou non la
relation. Bon, je viens de tester, ça fonctionne parfaitement :wink: merci
bien.

Attention sur un point, je vais faire une analogie avec Twitter.
Si A est ami avec B, c’est comme si A suit B. Or sous Twitter,
A suit B,ça ne veut pas autant dire que B suit A (relation
asymétrique) et donc followers de A != followings de A

a.friends c’est comme si tu faisais a.followings, tu as
tout ceux que A suit. Donc si tu considères que la
relation est symétrique, il va te manquer a.followers - a.followings
ce qui dans un sens, veut dire que a.friends = a.followers |
a.followings

donc tout dépend si tu considères A(id 1) est ami avec B(id 2)
crée un tuple dans la table friendships (1,2) ou doit en créer
deux : (1,2) (2,1)

Dans le premier cas, tu risques de confondre friends et followings.

Tu me suis ? :slight_smile:

– Jean-François.


http://twitter.com/underflow_