建模团队

时间:2009-06-19 15:32:42

标签: ruby-on-rails ruby activerecord membership

我只想获得一些关于更好地建立铁路团队/团队成员资格的方法的反馈 我目前有以下内容:

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的{​​{1}}属性?

这个模型的另一个问题是我很难找到确定UserA是否是UserB拥有的团队成员的好方法。我现在正在做:

Membership

其中membership_id是包含我正在尝试确定的用户的成员资格,是属于current_user的团队的成员。

那么,任何人都有更好的方法对此进行建模吗?

感谢您的任何建议!

修改:用户确实可以成为多个团队的所有者/成员

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

以其他方式查找会员资格

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