2009-06-19 81 views
1

我只想獲得一些關於更好的方法來建模團隊/團隊成員資格的反饋。
目前,我有以下幾點:建模團隊

class User 
    has_many :teams, :foreign_key => "owner_id" #user owns this team 
    has_many :memberships #user is a member of these teams 


class Team 
    belongs_to :team_administrator, :class_name => "User", :foreign_key => "owner_id" 
    has_many :memberships 

class Membership 
    belongs_to :team 
    belongs_to :user 

我不喜歡球隊管理員的部分,因爲我必須堅持認爲他無論是在一個會員,他擁有一個團隊。也許最好有is_administrator財產Membership

這個模型的另一個問題是,我在努力尋找確定用戶A是用戶B擁有一個團隊成員的一種很好的方式。我目前在做:

Membership.first(:joins => :team, :conditions => {:id => params[:membership_id], :teams => {:owner_id => current_user}}) 

其中membership_id是包含用戶的成員資格,我試圖確定是屬於current_user的團隊的成員。

因此,任何人有更好的方法來模擬這種?

感謝您的諮詢!

編輯:用戶確實可以多個團隊

+0

如果用戶只有一個團隊,您並不真正需要會員表/模型。除非會員資格是你存儲關於該用戶的信息與團隊有關的信息,那麼你應該在那裏存儲is_administrator – ErsatzRyan 2009-06-19 15:58:34

+0

也許我應該明確說明,用戶可以讓我成爲多個團隊的成員/所有者。 – neiled 2009-06-19 16:00:07

回答

1

的所有者/成員找到成員的其他方式

@membership = current_user.membership.find(params[:membership_id], :joins => :team) 
4

你需要的是多態:

class User 
    has_many :teams, :as => team_administrator, :foreign_key => "owner_id" 
    has_many :teams, :through => :memberships #user is a member of these teams 
    has_many :memberships 

class Team 
    belongs_to :team_administrator, :polymorphic => true, :foreign_key => "owner_id" 
    has_many :users, :though => memberships 

class Membership 
    belongs_to :team 
    belongs_to :user 

要了解用戶A是B的團隊的一員:

b = User.find_by_name("B") 
a = User.find_by_name("A") 
a.teams.find_by_owner_id(b.id)