2012-01-11 7 views
1

J'ai un modèle dans les rails, disons User, que je veux avoir une relation avec un autre utilisateur.Ruby relation entre le même modèle

utilisateur A, peut être le patron de l'utilisateur B et l'utilisateur B peut être le patron de l'utilisateur C et D.

Cette relation est un à plusieurs. Un utilisateur peut se tenir au-dessus de plusieurs utilisateurs.

Comment est-ce que je ferais ceci.
Mon modèle d'utilisateur a actuellement un ID avec le nom boss_id, qui sera nul si l'utilisateur est dans le haut de la chaîne alimentaire.

Ma classe active record ressemble à ceci:

class User < ActiveRecord::Base 

    has_many :users #People beneath the user 
    belongs_to :user 
end 

Mais maintenant je veux utiliser relation avec un nom. Disons boss et followers.

Comment puis-je y parvenir?

Répondre

6

Voilà comment cela ressemblerait à ceci:

class User < ActiveRecord::Base 

    belongs_to :boss, :class_name => 'User' 
    has_many :followers, :class_name => 'User', :foreign_key => :boss_id 

end 
1

Il est appelé auto rejoindre

Self rejoint

Dans la conception d'un modèle de données, vous trouverez parfois un modèle qui devrait avoir une relation à lui-même. Par exemple, vous pouvez stocker tous les employés dans un modèle de base de données unique, mais être capable de tracer des relations, par exemple entre le manager et ses subordonnés. Cette situation peut être modélisé avec des associations d'auto-adhésion:

exemple des employés:

class Employee < ActiveRecord::Base 

    has_many :subordinates, :class_name => "Employee" 
    belongs_to :manager, :class_name => "Employee", :foreign_key => "manager_id" 

end 

Avec cette configuration, vous pouvez récupérer @ employee.subordinates et @ employee.manager.

+0

Site de réfrence http://guides.rubyonrails.org/association_basics.html#self-joins –

Questions connexes