我的代码中有一行如下所示...
injury.player_extract.player
我收到来自名为 bullet 的 gem 的通知,指出检测到 n+1 查询。现在有一个从受伤到球员提取的关联,然后是 player_extract 到球员——我将在下面概述。我已经尝试添加 -> { includes: player}
因为这是 bullet 推荐的,但我仍然收到错误。谁能解释为什么我仍然会收到它?
协会
injury.rb
belongs_to :player_extract, -> { includes :player }, class_name: 'PlayerExtract', foreign_key: 'Playerid', primary_key: 'Playerid'
player_extract.rb
belongs_to :player, foreign_key: 'Playerid', primary_key: 'leagueid'
player.rb
has_one :player_extract, class_name: 'PlayerExtract', foreign_key: 'Playerid', primary_key: 'leagueid'
最佳答案
您可能应该对所有数据使用预先加载来解决问题。
从简短的检查来看,您似乎在 injury.rb
上使用了 includes
指令,但在 player_extract.rb
上没有使用 - 所以每当使用 PlayerExtract
访问实际数据时,Player
就会延迟加载。
查看这些链接:
我可能会考虑将专用范围与 joins
( here ) 或 includes
指令一起使用...我不确定将指令放在关系中声明(has_one
等')是最好的方式。
关于ruby-on-rails - 如何摆脱归因于 rails 关联的 n+1 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31776712/