1

我只是想获得一些关于在 Rails 中建模团队/团队成员的更好方法的反馈。
我目前有以下内容:

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

这个模型的另一个问题是我正在努力寻找一种很好的方法来确定 UserA 是否是 UserB 拥有的团队的成员。我目前正在做:

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

其中membership_id 是包含我要确定的用户的会员资格是属于current_user 的团队的成员。

那么,有人有更好的方法来建模吗?

感谢您的任何建议!

编辑:用户确实可以是多个团队的所有者/成员

4

2 回答 2

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)
于 2009-06-19T16:22:20.137 回答
1

以另一种方式找到会员资格

@membership = current_user.membership.find(params[:membership_id], :joins => :team)
于 2009-06-19T15:58:44.130 回答