例如,我有 2 名玩家的游戏,未来会同时进行不止一款游戏。我需要创建关联,让我有机会简单地调用 user.games,它将返回涉及该用户的所有游戏,如 first_user_id 或 second_user_id。
桌面游戏桌 first_user_id second_user_id
表用户id
模型用户 has_name ??
例如,我有 2 名玩家的游戏,未来会同时进行不止一款游戏。我需要创建关联,让我有机会简单地调用 user.games,它将返回涉及该用户的所有游戏,如 first_user_id 或 second_user_id。
桌面游戏桌 first_user_id second_user_id
表用户id
模型用户 has_name ??
我认为你要求的是:
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: ...
,以防您希望能够访问用户中的游戏列表,其中玩家是特定玩家#: