Forum: Rails France n-n self referring

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.
Sylvain P. (Guest)
on 2008-12-16 01:32
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 ?
Jean-François Trân (Guest)
on 2008-12-16 02:08
(Received via mailing list)
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_
Sylvain P. (Guest)
on 2008-12-16 02:13
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 ;) 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_
Jean-François Trân (Guest)
on 2008-12-16 02:36
(Received via mailing list)
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 ;) 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 ? :)

   -- Jean-François.

--
http://twitter.com/underflow_
This topic is locked and can not be replied to.