rails与多个可能的外键关联

时间:2013-02-21 11:02:22

标签: ruby-on-rails

例如,我有2个玩家游戏,未来同时拥有多个游戏。 我需要创建一个关联,让我有机会简单地调用user.games,它将返回所有涉及该用户的游戏,如first_user_id或second_user_id。

桌面游戏 台 first_user_id second_user_id

表用户 ID

模型用户 has_namy ??

1 个答案:

答案 0 :(得分: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”的列,并在User上执行has_many :games, through: :user_games以获取所有游戏,无论玩家编号如何,然后使用查询,过滤,范围界定等等,只需找到玩家是某个数字的游戏。以下是与联接模型中列has_many ..., through: ...的范围/条件相关的几个问题,以防您希望能够访问用户中的游戏列表,其中玩家是特定玩家#: