Rails将多个模型链接到多个模型

时间:2017-06-24 23:24:19

标签: ruby-on-rails ruby

假设我正在使用ruby在轨道上编写一个基本的跳棋游戏。

所以我有一个玩家模型和一个游戏模型。每场比赛将有两名球员。每个玩家可以玩很多游戏(因为他们可以玩多个游戏)。

存储两个用户属于游戏的最有效方法是什么?我可以像player_one_id:integerplayer_two_id:integer那样制作字段,但感觉有点笨拙。然后查看玩家当前所处的游戏效率不高。

完成这样的事情的最佳方法是什么?理想情况下,它们存放得很干净,我可以轻松查看玩家当前所处的游戏。

2 个答案:

答案 0 :(得分:3)

我会按照你的建议使用两个播放器列(例如player_one_idplayer_two_id)并设置这样的模型关系:

class Game < ApplicationRecord
  belongs_to :player_one, class: "Player"
  belongs_to :player_two, class: "Player"
end

class Player < ApplicationRecord
  has_many :games
end

我认为它根本不是 hacky ,因为每场比赛你总会有两名球员。

至于查找玩家当前所在的游戏,您可以这样做:

Game.where("player_one_id = ? OR player_two_id = ?", player_id, player_id) 

答案 1 :(得分:-1)

你有一个&#34; player_one&#34;表...

 player_one
 -----------
 (PK) player_one_id
 EngineerName

&#34; player_two&#34;表...

 player_two
 ---------
 (PK) player_two_id
 player_name

您现在添加一个名为&#34; Games&#34;的链接表。 (或类似的)引用player_oneplayer_two ...

的ID
 Games
 ------------------
 (PK) GameId
 (FK) player_one_id
 (FK) player_two_id

这样,你将所有Player One Details和Player Two细节分开保存,并仅使用Ids链接它们......链接表看起来像这样......

  player_one | player_two
 ------------+----------
      1      |    1
      1      |    2
      1      |    3
      2      |    1
      2      |    2
      2      |    3

这是最佳做法,它为您提供了最大的扩展机会。