Ruby on rails 模特儿团队

Ruby on rails 模特儿团队,ruby-on-rails,ruby,activerecord,membership,Ruby On Rails,Ruby,Activerecord,Membership,我只是想得到一些关于在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

我只是想得到一些关于在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_管理员
属性

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

Membership.first(:joins => :team, :conditions => {:id => params[:membership_id], :teams => {:owner_id => current_user}})
其中,membership_id是包含我试图确定的用户是属于当前_用户的团队成员的成员身份

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

谢谢你的建议


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

以另一种方式查找成员身份

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

以另一种方式查找成员

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

您需要的是多态性:

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)

您需要的是多态性:

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)

如果用户只有一个团队,那么实际上并不需要成员表/模型。除非成员身份是您存储该用户与团队相关信息的地方,否则您应该将其存储为管理员。也许我应该说清楚,一个用户可以将其指定为多个团队的成员/所有者。如果用户只有一个团队,您实际上不需要成员资格表/模型。除非“成员身份”是存储该用户与团队相关信息的位置,否则“是”您应该存储的是\u管理员。也许我应该说清楚,一个用户可以让我成为多个团队的成员/所有者。谢谢,但实际上,在这种情况下,成员身份是用户与团队之间的成员身份,不是所有者和团队,所以它不起作用。谢谢,但实际上,在这种情况下,成员ID是用户和团队之间的成员身份,而不是所有者和团队,所以它不起作用。