Ruby on rails Rails外键设置问题

Ruby on rails Rails外键设置问题,ruby-on-rails,ruby,foreign-key-relationship,Ruby On Rails,Ruby,Foreign Key Relationship,我刚刚(重新)开始玩Rails,我正在制作一个小纸牌游戏应用程序。我似乎无法确定外键设置。 假设我有4个对象: -游戏 -播放器 -手 -卡片 一场游戏有很多玩家,他们有很多手牌。但这些牌也独立于手牌、玩家和游戏。 例如,我的数据库中有6张卡片(1到6张)。在同一场游戏中,有可能有两名玩家手中有第3张牌 我如何设置我的钥匙?我是否应该为“CardInHand”创建另一个对象来简化它?卡和手之间的关系是经典的(HABTM)。当您有一个HABTM关系时,需要有一个表来管理配对(比如说,手卡中只有对I

我刚刚(重新)开始玩Rails,我正在制作一个小纸牌游戏应用程序。我似乎无法确定外键设置。
假设我有4个对象:
-游戏
-播放器
-手
-卡片

一场游戏有很多玩家,他们有很多手牌。但这些牌也独立于手牌、玩家和游戏。
例如,我的数据库中有6张卡片(1到6张)。在同一场游戏中,有可能有两名玩家手中有第3张牌


我如何设置我的钥匙?我是否应该为“CardInHand”创建另一个对象来简化它?

卡和手之间的关系是经典的(HABTM)。当您有一个HABTM关系时,需要有一个表来管理配对(比如说,手卡中只有对ID),但不需要有相应的模型

(请注意,您需要创建迁移以自己生成hands_cards表;它不会自动创建。)


正如你所说,你可以选择创建一个单独的模型来表示手牌中的一张牌——这是一个
有很多:通过
关系——但我只会在有特殊原因将这种关系建模为具体对象的情况下这样做。

手牌之间的关系是经典的(HABTM)。当您有一个HABTM关系时,需要有一个表来管理配对(比如说,手卡中只有对ID),但不需要有相应的模型

(请注意,您需要创建迁移以自己生成hands_cards表;它不会自动创建。)


正如您所说,您确实可以选择创建一个单独的模型来表示手中的一张卡——这是一个
有很多:通过
关系——但我只会在有特殊原因将该关系建模为具体对象的情况下这样做。

Rails的标准最佳实践是不在db中使用外键,但是要在模型上使用验证来确保数据的正确性


正如另一个答案所解释的那样,Rails的标准最佳实践不是在db中使用外键,而是在模型上使用验证来确保数据的正确性


另一个答案解释了您想要设置的内容。

我认为这是一个误导性的答案——Rails绝对使用外键,它只是不创建外键约束。一个重要的区别。如果我的手动表中有一个玩家id,那就是一个外键,即使我的数据库没有强制执行玩家id是有效的。嗯,你是对的-看起来我很困惑,尽管这就是他所说的。我的错。我认为这是一个误导性的答案——Rails绝对使用外键,它只是不创建外键约束。一个重要的区别。如果我的手动表中有一个玩家id,那就是一个外键,即使我的数据库没有强制执行玩家id是有效的。嗯,你是对的-看起来我很困惑,尽管这就是他所说的。我的错。