0

たとえば、私は 2 人のプレーヤーのゲームを持っていますが、将来は同時に複数のゲームを行うことができます。単純に user.games を呼び出す機会を与える関連付けを作成する必要があります。これにより、そのユーザーが関与するすべてのゲームが first_user_id または second_user_id として返されます。

テーブルゲームデスク first_user_id second_user_id

テーブルのユーザー ID

モデル ユーザー has_namy ??

4

1 に答える 1

1

あなたが求めていると思うもの:

class Game < ActiveRecord::Base
  has_one :first_user, foreign_key: :first_user_id, class_name: 'User'
  has_one :second_user, foreign_key: :second_user_id, class_name: 'User'
end

class User < ActiveRecord::Base
  has_many :first_user_games, foreign_key: :first_user_id, class_name: 'Game'
  has_many :second_user_games, foreign_key: :second_user_id, class_name: 'Game'

  def games
    first_user_games + second_user_games
  end
end

あなたがこれを必要とするのはおそらく悪い兆候だと思いますが、それは苦痛になるでしょう. 代わりに、UserGames テーブルと UserGame 結合モデルを追加し、UserGame に「player_number」という列を配置しhas_many :games, through: :user_games、User で実行して、プレイヤー番号に関係なくすべてのゲームを取得し、必要に応じてクエリ、フィルタリング、スコープなどを使用できます。プレーヤーが特定の数だったゲームのみを検索します。has_many ..., through: ...プレイヤーが特定のプレイヤーである User のゲームのリストにアクセスできるようにしたい場合に備えて、結合モデルの列のスコープ/条件に関連するいくつかの質問を次に示します。

于 2013-02-22T20:03:43.177 に答える