たとえば、私は 2 人のプレーヤーのゲームを持っていますが、将来は同時に複数のゲームを行うことができます。単純に user.games を呼び出す機会を与える関連付けを作成する必要があります。これにより、そのユーザーが関与するすべてのゲームが first_user_id または second_user_id として返されます。
テーブルゲームデスク first_user_id second_user_id
テーブルのユーザー ID
モデル ユーザー has_namy ??
たとえば、私は 2 人のプレーヤーのゲームを持っていますが、将来は同時に複数のゲームを行うことができます。単純に user.games を呼び出す機会を与える関連付けを作成する必要があります。これにより、そのユーザーが関与するすべてのゲームが first_user_id または second_user_id として返されます。
テーブルゲームデスク first_user_id second_user_id
テーブルのユーザー ID
モデル ユーザー has_namy ??
あなたが求めていると思うもの:
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 のゲームのリストにアクセスできるようにしたい場合に備えて、結合モデルの列のスコープ/条件に関連するいくつかの質問を次に示します。