Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 所属的有一个结构_Ruby On Rails_Activerecord_Belongs To_Has One - Fatal编程技术网

Ruby on rails 所属的有一个结构

Ruby on rails 所属的有一个结构,ruby-on-rails,activerecord,belongs-to,has-one,Ruby On Rails,Activerecord,Belongs To,Has One,我有一个具有以下特征的应用程序 我有一张用户表。用户表基本上包含俱乐部经理、球队经理和球员登录系统的用户名和密码 我应该如何构造模型和表格 我计划为俱乐部、球队和球员创建表格。但我不确定是否要显示它们与users表之间的关系 我可以在每个模型中创建user\u id,但关系可能是Club-owners\u-to-user,这似乎不正确。此外,我最终会得到一个用户模型,它具有以下特性 has_one :club has_one :team has_one :player 这是不对的。一个用户在任

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

我有一张用户表。用户表基本上包含俱乐部经理、球队经理和球员登录系统的用户名和密码

我应该如何构造模型和表格

我计划为俱乐部、球队和球员创建表格。但我不确定是否要显示它们与users表之间的关系

我可以在每个模型中创建
user\u id
,但关系可能是
Club-owners\u-to-user
,这似乎不正确。此外,我最终会得到一个用户模型,它具有以下特性

has_one :club
has_one :team
has_one :player
这是不对的。一个用户在任何给定的时间只有一个


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

在Rails下,
has\u one
实际上是“has至多一个”。在
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

我甚至想把
用户
改名为
经理
,或者在
俱乐部
团队
玩家
模型中让
拥有一个:经理,:class\u name=>“User”
,但是你的电话。

在Rails下,
拥有一个
实际上是“拥有最多一个”。在
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

我甚至想把
用户
改名为
经理
,或者在
俱乐部
团队
球员
模型中让
拥有一个:经理、:class\u name=>“User”
,但你的决定并不清楚用户代表什么。如果一个俱乐部有球队,一个球队有球员,那么什么是用户?有什么,有什么?很抱歉。。我编辑了这个问题以澄清用户表。啊,我明白了。用户本质上是俱乐部、球队或球员之一的“经理”。您是否能够更改数据库中的用户表?是的,如果需要,我可以更改用户表。我正在使用restful身份验证从该表登录用户。Ok。我在下面编辑了我的答案。不清楚用户代表什么。如果一个俱乐部有球队,一个球队有球员,那么什么是用户?有什么,有什么?很抱歉。。我编辑了这个问题以澄清用户表。啊,我明白了。用户本质上是俱乐部、球队或球员之一的“经理”。您是否能够更改数据库中的用户表?是的,如果需要,我可以更改用户表。我正在使用restful身份验证从该表登录用户。Ok。我在下面编辑了我的答案。我考虑在用户表中添加三个ID。我们将如何识别已登录的“实体”。对于每个用户,只有一个俱乐部id、球队id或球员id。我将检查这三个用户是否属于俱乐部、球队或球员。从
用户
模式到俱乐部/团队/球员,还有什么更好的方法吗?我想你可以用
抽象类
或多态关联做些聪明的事情;但我倾向于在User中使用一种方法,比如
defmanaged;俱乐部|团队|球员;结束
我考虑在用户表中添加三个ID。我们将如何识别已登录的“实体”。对于每个用户,只有一个俱乐部id、球队id或球员id。我将检查这三个用户是否属于俱乐部、球队或球员。从
用户
模式到俱乐部/团队/球员,还有什么更好的方法吗?我想你可以用
抽象类
或多态关联做些聪明的事情;但我倾向于在User中使用一种方法,比如
defmanaged;俱乐部|团队|球员;结束
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