代码之家  ›  专栏  ›  技术社区  ›  Chowlett

轨道:双向有很多:通过关系

  •  0
  • Chowlett  · 技术社区  · 14 年前

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

    游戏 可以有很多 Players ,每一个 用户 可以有很多 球员 (一个人可以同时参加多个游戏);但是 玩家 正好在一个 游戏 ,精确地表示一个 用户 . 因此,目前我的关系如下。

    class Game
      has_many :players
    end
    
    class User
      has_many :players
    end
    
    class Player
      belongs_to :game
      belongs_to :user
    end
    

    …哪里自然的 players 表有 game_id user_id 列,但 games users 没有外键。

    我还想说明一个事实,即 游戏 有许多 Users 在里面演奏;每个 用户 有许多 Games 他们在那里演奏。我该怎么做?够多加一点吗

    class Game
      has_many :users, :through => :players
    end
    
    class User
      has_many :games, :through => :players
    end
    
    1 回复  |  直到 14 年前
        1
  •  1
  •   Roadmaster    14 年前

    你所建议的应该足够了;现在,每个游戏都应该有一个用户[]数组,每个用户都有一个游戏[]数组。

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

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

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

    希望这有帮助。