0

我在 Rails 应用程序中有三个模型:Game代表正在玩的游戏的一个实例。Player代表游戏参与者的一个实例。User代表可以参与游戏的注册人。

每个Game可以有很多Players,每个User可以有很多Players(一个人可以同时参与多个游戏);但每一个Player都恰好在一个之中Game,并且代表着一个User。因此,我目前的关系如下。

class Game
  has_many :players
end

class User
  has_many :players
end

class Player
  belongs_to :game
  belongs_to :user
end

...自然players表有game_iduser_id列,但games没有users外键。

我还想代表每个Game人都有很多Users演奏的事实;每个User人都有很多Games他们正在玩的东西。我该怎么做呢?补充就够了吗

class Game
  has_many :users, :through => :players
end

class User
  has_many :games, :through => :players
end
4

1 回答 1

1

你提出的应该足够了;现在,每个游戏都应该有一个 users[] 数组,每个用户都有一个 games[] 数组。

http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association

:has_many :through 基本上是典型的多对多模型的扩展,在该模型中,您有一个中间表,其中包含每个相关实体的 id。然而,在 Rails 中,:has_and_belongs_to_many 关系不允许中间表本身是一个实体,因为它除了充当两个相关模型之间的粘合剂之外没有任何意义。

:has_many :through 允许应用程序中的真实实体或模型(在您的情况下为玩家)充当其他两个(游戏、用户)之间的“粘合剂”,但也允许您操纵“玩家”,因为在这种情况下它确实包含重要信息。

希望这可以帮助。

于 2010-05-24T14:52:19.057 回答