JeuWeb - Crée ton jeu par navigateur
[Rails] Association avec deux même modèles d'une même classe - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [Rails] Association avec deux même modèles d'une même classe (/showthread.php?tid=5769)

Pages : 1 2


[Rails] Association avec deux même modèles d'une même classe - Maz - 24-10-2011

Salut! J'ai besoin de faire une association entre deux entités d'un même modèle, comme pour une messagerie interne (expéditeur et receveur sont tout deux "utilisateur"), dans la base de données ça donnerais quelque chose comme:
id
expediteur
receveur

J'ai juste besoin de ces trois champs, mais comment faire avec les association d'ActiveRecord de rails? J'ai suivi le guide qui parles du sujet, je dois donc utiliser des self join.

Mais dois-je créer la migration moi-même? J'ai essayer:

rails g model mapCitiesDiscovery user:references user:references

Comme je m'y attendais, j'ai eu droit à une belle erreur =D.

Une idée?


RE: [Rails]Association entre deux même modèle. - Sephi-Chan - 24-10-2011

J'ai un très bon exemple de ça dans Conquest on Rails : un territoire (Territory) disposes de territoires voisins, la relation de voisinage (Neighbourhood) est donc associés à deux territoires.

Voici les fichiers concernés :

https://github.com/Sephi-Chan/Conquest-on-Rails/blob/develop/app/models/territory.rb
https://github.com/Sephi-Chan/Conquest-on-Rails/blob/develop/app/models/neighbourhood.rb


Ps : Explique-moi le nom de ton modèle, s'il te plaît. Smile


RE: [Rails]Association entre deux même modèle. - Maz - 24-10-2011

(24-10-2011, 10:41 PM)Sephi-Chan a écrit : J'ai un très bon exemple de ça dans Conquest on Rails : un territoire (Territory) disposes de territoires voisins, la relation de voisinage (Neighbourhood) est donc associés à deux territoires.

Voici les fichiers concernés :

https://github.com/Sephi-Chan/Conquest-on-Rails/blob/develop/app/models/territory.rb
https://github.com/Sephi-Chan/Conquest-on-Rails/blob/develop/app/models/neighbourhood.rb


Ps : Explique-moi le nom de ton modèle, s'il te plaît. Smile

En fait j'ai une carte, avec tout un système de "découverte", de base toutes les cités ennemies sont invisible(un peu à la warcraft et autres STR). J'aimerais donc créé une table ou seront enregistré chaque découverte des cités par un joueur(je penses qu'elle risques un jour d'être assez conséquente, mais je tiens à cette fonctionnalité).

C'est donc deux objet de classe "City" que je voudrais lié.


RE: [Rails] Association avec deux même modèles d'une même classe - Sephi-Chan - 24-10-2011

Ne préfixe pas le nom de tes modèles, ça ne sert à rien et ça nuit à la lisibilité.
Je te conseille de nommer ce modèle CityDiscovery puisqu'elle modélise la découverte d'une cité (par une autre, mais ça importe).

Du coup tu devrais pouvoir adapter mon exemple facilement, même si je pense que tu vas encore tomber dans le piège du mauvais nommage.


RE: [Rails] Association avec deux même modèles d'une même classe - Maz - 24-10-2011

(24-10-2011, 10:55 PM)Sephi-Chan a écrit : même si je pense que tu vas encore tomber dans le piège du mauvais nommage.
Tu peux en être sur ,) merci en tous cas.



RE: [Rails] Association avec deux même modèles d'une même classe - Sephi-Chan - 24-10-2011

Pense à montrer ce que tu as fait quand ça marchera. :p


RE: [Rails] Association avec deux même modèles d'une même classe - Maz - 25-10-2011

(24-10-2011, 11:02 PM)Sephi-Chan a écrit : Pense à montrer ce que tu as fait quand ça marchera. :p

Une question (un peu hors sujet), je regardais le fichier de ta migration, et je vois que tu utilises de simples integer à la place des références? Une raison à cela?


RE: [Rails] Association avec deux même modèles d'une même classe - Sephi-Chan - 25-10-2011

Ça n'a aucune incidence sur le résultat final. Les deux notations suivantes sont strictement équivalentes.


t.integer :other_territory_id
t.references :other_territory



RE: [Rails] Association avec deux même modèles d'une même classe - popayan - 25-10-2011

Je sais qu'elles sont équivalentes mais je préfère 100x la première, je la trouve bien plus parlante


RE: [Rails] Association avec deux même modèles d'une même classe - Maz - 25-10-2011

Moi je préfères la seconde, plus parlante je trouves aussi ,P d'autant que lorsque l'on utilise le generateur de rails, post:references génères un champs post_id et un index post_id(optimisation des requêtes?)