gpt4 book ai didi

ruby-on-rails - Rails ActiveRecord 使用不同的键通过 has_many 关联访问记录

转载 作者:数据小太阳 更新时间:2023-10-29 08:35:42 25 4
gpt4 key购买 nike

场景

我在 Rails 中为我不久前编写的一个旧应用程序构建一个管理面板,因此该数据库不适用于 ActiveRecord

设计

enter image description here

如您所见,GameRefferal 表使用的外键不是 User 的 id 而不是 User 上的一列,称为 steam_id

Rails 模型:

  • 用户
    • has_many :games, :foreign_key => '玩家'

问题

当我尝试以下命令时:

User.find(1).games

ActiveRecord 正在生成以下查询:

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

的游戏

我该如何解决?最重要的是,我如何修复 belongs_to 关联?

注意事项

主网站已经上线并拥有活跃用户。我不能只是开始重新设计整个数据库和代码库本身。

最佳答案

尝试在关联中指定primary_key:

用户模型:

has_many :games, primary_key: 'steam_id', foreign_key: 'player'

游戏模型:

belongs_to :user, primary_key: 'steam_id', foreign_key: 'player'

现在您应该可以使用 User.find(1).games,它将使用 steam_id 而不是 id 查询用户的游戏.

关于ruby-on-rails - Rails ActiveRecord 使用不同的键通过 has_many 关联访问记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44554975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com