Ruby on rails 模特儿团队
我只是想得到一些关于在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
我目前有以下情况:
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是用户和团队之间的成员身份,而不是所有者和团队,所以它不起作用。