如何摆脱归因于rails关联的n + 1查询?

时间:2015-08-02 21:19:16

标签: ruby-on-rails ruby activerecord associations eager-loading

我的代码中有一行代码如下所示......

injury.player_extract.player

我从一个名为bullet的gem收到通知,检测到有n + 1个查询。现在有一个从伤害到球员提取,然后是球员提取到球员的关联 - 我将在下面概述。我已经尝试添加-> { includes: player},因为这是推荐的内容,但我仍然收到错误。谁能解释为什么我还会收到它?

协会

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'

1 个答案:

答案 0 :(得分:0)

您应该对所有数据使用预先加载来解决问题。

从简短的检查来看,您似乎在includes上使用injury.rb指令,但player_extract.rb上没有{ - 1}},因此只要PlayerPlayerExtract时就会延迟加载joins 1}}用于访问实际数据。

看看这些链接:

我可能会考虑使用includeshere)或has_one指令的专用范围...我不确定将指令放在关系声明中( {{1}}等等#39;)是最好的方法。