Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.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_Ruby_Database_Rails Activerecord_Models - Fatal编程技术网

Ruby on rails 建立模型和数据库的最佳方法

Ruby on rails 建立模型和数据库的最佳方法,ruby-on-rails,ruby,database,rails-activerecord,models,Ruby On Rails,Ruby,Database,Rails Activerecord,Models,我正在创建一个与运动队打交道的应用程序。目前我有两种型号。Users.rb模型和Teams.rb模型。在应用程序的用户中,我希望有队长和队友。我想让队长在签约时有权组建球队。我希望队长属于一个团队,队友属于一个团队。我希望球队只有一名队长。最好的设置方法是什么?在用户模型中我应该有队长和队友的别名吗?还是制作一个captains.rb模型更好 如果队长和队友具有不同的属性,那么我认为最好将模型分开,但如果不是这样,为什么不为用户和团队之间的队友创建一个联接表,并且团队模型具有所有者id 模式示例

我正在创建一个与运动队打交道的应用程序。目前我有两种型号。Users.rb模型和Teams.rb模型。在应用程序的用户中,我希望有队长和队友。我想让队长在签约时有权组建球队。我希望队长属于一个团队,队友属于一个团队。我希望球队只有一名队长。最好的设置方法是什么?在用户模型中我应该有队长和队友的别名吗?还是制作一个captains.rb模型更好

如果队长和队友具有不同的属性,那么我认为最好将模型分开,但如果不是这样,为什么不为用户和团队之间的队友创建一个联接表,并且团队模型具有所有者id

模式示例:

团队(所有者id…)

队友(用户id、团队id等)

这将帮助您使用团队模型中的owner\u id列,将团队和用户模型之间的归属关联设置为队长,其他成员可以通过队友模型由has\u多个队友完成,甚至可以使用has\u和has\u Bowns\u多个关联。 通过这种方式,您将设法让一个用户拥有一个团队,甚至是其他团队中的一个队友


另一个想法是让具有额外列的联接表中的所有成员决定其在团队中的角色,这将使您在将来添加更多角色时有更多的控制权,并定义验证和Scoop以提供这种服务。

好,首先让我们列出关系假设,因为从您的描述中有一些是模糊的:

用户可以:

  • 有许多船长
  • 参加许多队
团队可以:

  • 属于一个船长
  • 有许多用户作为队友
因此,我认为您需要3种型号:

  • 使用者
  • 团队
  • 作为用户和团队之间的连接表的多个成员
队友模型肯定会有:

  • 用户id
  • 团队id
  • 可能的角色/类型字段
这就让你不得不根据如何使用数据来决定应用程序。由于一个团队只有一名队长,您可以在队友模型中省略角色字段,只需将用户id或队长id添加到实际团队模型中即可。这将意味着队长被视为特殊的,与其他队友总是不同的。然而,我猜有些事情你可能想通过包括队长在内的团队所有成员来进行循环。这就是为什么你应该让队长成为队友模型中的一个特殊角色,并添加验证以确保只有一名队长。那你就不必在整个队伍中为队长做特殊的处理了

假设您使用角色字段,那么您的最终模型将具有以下关系:

队友

  • 属于:团队
  • 属于:用户
使用者

  • 你有很多队友吗
  • 有很多:团队,通过::队友
团队

  • 你有很多队友吗
  • 有很多:用户,通过::队友
  • 有一个队:队长,->{角色:'队长'},班名:'队友'
你也可以通过计算一个has\u many through来获得队长用户,而不是队长队友,从而对最后一个更感兴趣。这篇文章有一些关于advanced has_one的有趣细节:

我会做以下事情:

在开始时,应用程序允许您注册为“用户aka团队所有者”或“队友”

  • Users.rb-可以创建团队并邀请其他队友。他有管理权
  • Teams.rb-属于用户,有许多队友
  • 队友.rb-属于团队
  • 所有指定的队友都可以有管理员可见的复选框“队长”,并带有布尔值。这可以避免您再创建一个db表。除非“队长”为“真”,否则队友状态为“简单球员”。否则就是“船长”
  • 另一种方法是允许用户创建团队和队友

  • 用户将拥有许多团队和队友
  • 队友属于用户,也属于团队
  • 团队属于用户,有很多队友

  • 队长和队友有一些不同的属性吗?只是一个警告:Rails的惯例是对模特使用单数名词
    rails g model Users
    会给您:[警告]型号名称“Users”被识别为复数,使用单数“User”代替。Override with--force复数或在运行生成器之前为此名词设置自定义屈折变化规则。