1

我有一个具有以下特征的应用程序

There are Clubs
Each Club has Teams
Each Team has Players

我有一个用户表。用户表主要包含俱乐部经理、球队经理和球员登录系统的用户名和密码。

我应该如何构建模型和表格?

我计划为俱乐部、球队和球员创建表格。但我不确定展示它们与用户表之间的关系。

我可以user_id在每个模型中创建,但这种关系Club belongs_to User似乎不正确。此外,我最终会得到一个具有以下内容的用户模型

has_one :club
has_one :team
has_one :player

这是不对的。在任何给定时间,用户将只有其中一个。

有没有更好的方法来构建它?

4

1 回答 1

1

在 Rails 下,has_one真的是“最多只有一个”。将所有三个has_one装饰器都放在User. 如果你想确保他们只有一个,你可以添加一个验证,例如:

class User < ActiveRecord::Base
  has_one :club
  has_one :team
  has_one :player

  validate :has_only_one

  private

  def has_only_one
    if [club, team, player].compact.length != 1
      errors.add_to_base("Must have precisely one of club, team or player")
    end
  end
end

由于您有能力更改数据库中的 users 表,我想我会将club_id, team_id, player_idin放入users, 并具有以下内容:

class Club < ActiveRecord::Base
  has_one :user
  has_many :teams
  has_many :players, :through => :teams
end

class Team < ActiveRecord::Base
  has_one :user
  belongs_to :club
  has_many :players
end

class Player < ActiveRecord::Base
  has_one :user
  belongs_to :team
  has_one :club, :through => :team
end

class User < ActiveRecord::Base
  belongs_to :club
  belongs_to :team
  belongs_to :player

  validate :belongs_to_only_one

  def belongs_to_only_one
    if [club, team, player].compact.length != 1
      errors.add_to_base("Must belong to precisely one of club, team or player")
    end
  end
end

我什至很想重命名UserManager, 或has_one :manager, :class_name => "User"Club,TeamPlayer模型中拥有 , 但你的电话。

于 2010-08-24T12:32:00.240 回答