我正在Rails中为我之前编写的旧应用程序构建一个管理面板,因此数据库不适用于 ActiveRecord 。
正如您所看到的,Game
和Refferal
表使用的外键不是id
的{{1}},而是User
上的一列1}},称为User
Rails模型:
steam_id
上课
User
当我尝试以下命令时:
has_many :games, :foreign_key => 'player'
ActiveRecord正在生成以下查询:
User.find(1).games
正如您在第二个查询中看到的那样,它会尝试查找User Load (0.0ms) SELECT `users`.* FROM `users` WHERE `users`.`id` = 1 LIMIT 1
Game Load (1012.0ms) SELECT `games`.* FROM `games` WHERE `games`.`player` = '1'
列等于 player
的游戏。
显然这不是我想要的。我希望 1
等于 game.player
我该如何解决?最重要的是,我如何修复user.steam_id
关联?
主网站已经上线并且有活跃用户。我不能开始重新设计整个数据库和代码库本身。
答案 0 :(得分:4)
尝试在关联中指定primary_key
:
User
型号:
has_many :games, primary_key: 'steam_id', foreign_key: 'player'
Game
型号:
belongs_to :user, primary_key: 'steam_id', foreign_key: 'player'
现在,您应该可以使用User.find(1).games
,steam_id
将使用id
代替PatientProfile
.joins(:recommendations, :reviews)
.group(:id)
.pluck(:name,
'count(distinct recommendations.id)',
'count(distinct reviews.id)')
来查询用户的游戏。
答案 1 :(得分:0)
您可以运行2个单独的查询:
user = User.find(1)
games = Games.where(player: user.stream_id)
答案 2 :(得分:0)
用户类:
has_many :games, :foreign_key => 'player'
游戏课程:
belongs_to :player, class_name: 'User'
这可能有助于您尝试。