Rails:解决n + 1查询问题

时间:2018-06-07 18:12:19

标签: ruby-on-rails eager-loading

我有一些相关的模型:

class Employee < ActiveRecord::Base
    has_many :check_ins
    has_many :weigh_ins, through: :check_ins
end

class Client < ActiveRecord::Base
    has_many :check_ins, -> { order(week: :asc) }, dependent: :destroy
    has_many :weigh_ins, :through => :check_ins, dependent: :destroy
end

class CheckIn < ActiveRecord::Base
    belongs_to :client
    belongs_to :employee
    has_one :weigh_in, dependent: :destroy
end

class WeighIn < ActiveRecord::Base
    belongs_to :client
    belongs_to :check_in
end

我需要能够在日期范围内提取employeecheck_ins

check_ins = Employee.check_ins.where("created_at >= ? AND created_at <= ?", start_date, end_date)

然后我需要遍历这些check_ins并在一个月内抓住他们的客户端以及该客户的所有其他check_ins,并访问每个check_in的{​​{1}}为了比较weigh_in字段以计算减重率。

weight

虽然这有效,但它会导致大量的内存膨胀,我希望有一种方法可以加载一些东西,所以我不知道所以我不需要进行数百次SQL查询。

我对于如此冗长和具体而道歉,我希望某些事情会对某些人有所帮助。

0 个答案:

没有答案