2012-01-11 16 views
1

私はレールにモデルを持っています。Userと言いましょう。別のユーザーとの関係を持ちたいと思っています。同じモデル間のRubyの関係

ユーザAは、この関係は、1対多数であるユーザCおよびD

のボスできるユーザBとユーザBのボスであることができます。 1人のユーザーが複数のユーザーの上に立つことができます。

どうすればいいですか?
私のユーザモデルは現在という名前のIDを持っています。ユーザがフードチェーンの最上部にいる場合はゼロになります。

私のアクティブレコードクラスは次のようになります。

class User < ActiveRecord::Base 

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

しかし、今、私は名前との関係を使用します。 bossfollowersと言うことができます。

どうすればこの問題を解決できますか?ここで

答えて

6

は、それは次のようになり方法は次のとおりです。それは自己と呼ばれ

class User < ActiveRecord::Base 

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

end 
1

自己がデータモデルを設計する際に

に参加参加、あなたは時々関係を持つべきモデルを見つけるでしょうそれ自体に。たとえば、すべての従業員を1つのデータベースモデルに格納することができますが、マネージャと従業員の間などの関係をトレースすることができます。この状況は、自己加入団体でモデル化することができます。

従業員の例:この設定で

class Employee < ActiveRecord::Base 

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

end 

、あなたがemployee.manager @ employee.subordinates @を取得することができます。

+0

参考サイトhttp://guides.rubyonrails.org/association_basics.html#self-joins –

関連する問題