2009-09-13 5 views
0

J'essaie de comprendre comment avoir une relation utilisateur à deux niveaux.Hiérarchie utilisateur (modèle), jointure auto-référentielle

Les photographes ont des clients. Les clients ont un photographe. Les deux sont des utilisateurs.

J'ai un modèle utilisateur qui ressemble à ceci:

class User < ActiveRecord::Base 
    #authlogic 

    has_many :client_associations, 
    :foreign_key => 'client_id', 
    :class_name => 'Association', 
    :dependent => :destroy 

    has_many :clients, :through => :client_associations 

    has_one :photographer_association, 
    :foreign_key => 'photographer_id', 
    :class_name => 'Association', 
    :dependent => :destroy 

    has_one :photographer, :through => :photographer_association 

end 

Et un modèle d'association qui ressemble à:

create_table "associations", :id => false, :force => true do |t| 
    t.integer "photographer_id" 
    t.integer "client_id" 
end 

class Association < ActiveRecord::Base 
    belongs_to :client, :class_name => 'User' 
    belongs_to :photographer, :class_name => 'User' 
end 

Quand je remplirai avec des données et le feu de la console , en cours d'exécution user.clients.all ou user.photographer me donne juste un tableau vide.

Qu'est-ce que je fais mal?

Répondre

2

Vous devez changer les FOREIGN_KEYS:

has_many :client_associations, 
    :foreign_key => 'photographer_id', 
    :class_name => 'Association', 
    :dependent => :destroy 

    has_many :clients, :through => :client_associations 

    has_one :photographer_association, 
    :foreign_key => 'client_id', 
    :class_name => 'Association', 
    :dependent => :destroy 

    has_one :photographer, :through => :photographer_association 
+0

Merci, qui a fait l'affaire. –

Questions connexes