【问题标题】:ActiveRecord Includes n+1 issuesActiveRecord 包括 n+1 个问题
【发布时间】:2013-11-23 07:25:43
【问题描述】:

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

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

对我来说,这意味着我正在加载当前用户、他的例程、那些例程的升降机以及这些升降机的锻炼和信息(它们是集合)。

  1. 我的假设是真的吗?
  2. Bullet gem 给了我两个错误,它声称我需要:
    Lift => [:routine] 所以它说添加“.include => [:routine]”

    Lift => [:infos] 所以它说添加“.include => [:infos]”

谁能给我解释一下?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby activerecord


    【解决方案1】:

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

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

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

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

    lift.routine
    

    您如何访问lift

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

    【讨论】:

    • 我目前的关系如下:一个用户有很多套路,一个套路有很多电梯,一个电梯属于一个运动,有很多信息(集)。我正在尝试将所有这些都加载到一个页面中,因为我在一个页面上显示了所有例程/升降机/锻炼名称/信息(集合)。
    • 一个动作有很多个动作,一个动作属于一个动作。这样,我们在运动台上只有一个瞬间的“蹲”,而运动名称为“蹲”的多个升降机。
    猜你喜欢
    • 2011-09-24
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 2011-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多