2009-06-19 125 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)