0

Railsアプリケーションには3つのモデルがありGameます。プレイされているゲームのインスタンスを表します。Playerゲームの参加者のインスタンスを表します。Userゲームに参加できる登録者を表します。

それぞれGameが多数を持つことができPlayers、それぞれが多数を持つUserことができますPlayers(1人の人が一度に複数のゲームに参加できます)。しかし、それぞれPlayerが正確に1つGameであり、正確に1つを表しUserます。したがって、現在の私の関係は次のとおりです。

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_idgamesusers

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関係では、2つの関連するモデル間の接着剤として機能する以外の意味がないため、中間テーブル自体をエンティティにすることはできません。

:has_many:throughを使用すると、アプリケーション内の実際のエンティティまたはモデル(この場合はプレーヤー)が他の2つ(ゲーム、ユーザー)間の「接着剤」として機能できますが、この場合は「プレーヤー」を操作することもできます。重要な情報。

お役に立てれば。

于 2010-05-24T14:52:19.057 に答える