ActiveRecord包含n + 1个问题

时间:2013-11-22 22:50:25

标签: ruby-on-rails ruby activerecord

我使用Bullet gem帮助我找到ActiveRecord查询的n + 1错误。我目前正在传递:

@user = User.includes(:routines => {:lifts => [:exercise,:infos]})。find(current_user.id)

对我而言,这意味着我正在加载当前用户,他的例程,那些例行程序的升降机,以及那些升降机的练习和信息(这些是设置)。

  1. 我的假设是否正确?
  2. 子弹宝石给了我两个错误,声称我需要: 提升=> [:例程]所以它说添加“.include => [:例程]”

    提升=> [:infos]所以它说添加“.include => [:infos]”
  3. 有人能够向我解释这个吗?

    谢谢!

1 个答案:

答案 0 :(得分:0)

你肯定是在正确的道路上。我强烈建议您通过http://guides.rubyonrails.org/

进行更新

当您访问以下数据时,您的设置支持预加载:

routines = @user.routines
lifts = @user.routines.map(&:lifts)

您能描述一下您是如何尝试访问这些数据的吗?您似乎可能尝试通过以下方式访问例程:

lift.routine

您如何访问lift

您可能希望确保在指定关联时使用:inverse_ofRoutine有多少:lifts