ruby-on-rails - 建模团队

标签 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 => "User", :foreign_key => "owner_id"
    has_many :memberships

class Membership
    belongs_to :team
    belongs_to :user

我不喜欢团队管理员部分,因为我必须保持他既是成员(member)又拥有团队。也许拥有 Membershipis_administrator 属性会更好?

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

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

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

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

感谢您的任何建议!

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

最佳答案

你需要的是多态性:

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)

关于ruby-on-rails - 建模团队,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1018607/

相关文章:

ruby-on-rails - Ruby 入门指南:未初始化常量 PostsController::Posts

ruby-on-rails - 在没有自动保存的情况下为 Activerecord 模型分配关联

ruby - 在 Ruby 1.8.7 中将带有二进制数据的 YAML 响应转换为 UTF-8

Ruby:使用 `.each` 或 `.step` ,每次迭代向前推进一个随机数量

mysql - 在 rails 中显示关系数据库表中的数据的问题

ruby-on-rails - ActiveRecord::Relation#explain 总是完整地运行查询

ruby-on-rails - 未定义的方法 `content_type' 为 nil :NilClass

ruby-on-rails - Rails API 应用程序 : (No MethodError) when I run foreman start

ruby-on-rails - rails : database queries too slow for scope that depends on join with another table

ruby-on-rails - before_save中设置参数