Ouverture de session

Commentaires récents

Syndication
Flux XML

[Résolu] Table de jointure entre les deux mêmes tables

[Résolu] Table de jointure entre les deux mêmes tables
Posté par rails42 le Vendredi, 24 Juillet, 2009 - 3:43pm. Développement

Salut !,

J'ai deux modèles :

User:
id : integer
username : string
password : string
...

Friend:
id : integer
user_id : integer
friend_id : integer
...

Friend serait ma table de jointure entre deux table users.

ainsi je pourrais faire


user = User.find(...)
user.username # => "alice"
user.id # => 1
...
user1 = User.find(...)
user1.username # => "bob"
user1.id # => 2
...
user.friends.push(user1) # en imaginant que user1 est le premier amis
user.friends[0].username # => "bob"

Ce qui donnerait ceci dans la table friends :
id : 1
user_id : 1
friend_id : 2

Je ne peux pas utiliser has_and_belongs_to_many :users sinon j'aurais une table de jointure users_users avec deux user_id.
J'ai pensé régler le problème en créant la table Friend avec
belongs_to :user, :foreign_key => :user_id
has_one :user, :foreign_key => :friend_id

et User
belongs_to :friend
has_many :friends

mais celà n'a pas donné ce que j'attendais. Je dois faire ça pour avoir le même résultat :


user.friends.create(:friend_id => user1.id)
ami = User.find(user.friends.friend_id)
ami.username

Pourriez-vous m'aider à faire fonctionner cette foutue table de jointure ?

J'espère que vous arriverez à comprendre ce que je viens de dire ^^'

Merci.



[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | sujet précédent | sujet suivant | envoyer par email ]

Options d'affichage des commentaires
Sélectionnez la méthode d'affichage des commentaires que vous préférez, puis cliquez sur "Sauvegarder" pour activer vos changements.

Sujet: 
has_and_belongs_to_many
Auteur: 
Fabien Jakimowicz
Date: 
Ven, 24/07/2009 - 16:41

Tu peux créer une table de jointure habtm :
create_table "friends_users", :id => false, :force => true do |t|
t.integer "user_id"
t.integer "friend_id"
end

Et avoir une petite ligne dans ton modèle User :
has_and_belongs_to_many :friends, :class_name => 'User', :join_table => 'friends_users', :association_foreign_key => 'friend_id'

Je pense que tu obtiens le comportement recherché avec une seule table User et une table de jointure liant User à User.

http://fabien.jakimowicz.com


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
Merci
Auteur: 
rails42
Date: 
Ven, 24/07/2009 - 16:58

Merci ça marche au poil ;)


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Sujet: 
oops désolé. commentaire
Auteur: 
mathieu.rousseau
Date: 
Ven, 31/07/2009 - 18:45

oops désolé. commentaire inutile, ça m'apprendra a mieux lire les autres commentaires.


[ Vous devez vous connecter ou vous enregistrer pour écrire des commentaires | envoyer par email ]

Nouveaux liens

Qui est en ligne
Il y a actuellement 1 utilisateur et 26 invités en ligne.

railsfrance.org - communauté francophone des utilisateurs de Ruby on Rails
[ Propulsé par Drupal ]