我有一个Record类和Pay Period类,每个类都有一个start_time和end_time。
我使用
抓取一系列记录Record.where(start_time: s..e)
我遇到了N + 1查询问题,因为当我遍历这些记录时,我会查询它的付费期。支付期间不能重叠,因此记录可以有一个或没有支付期;但它们与任何编码的活动记录协会都没有链接。我查询付款期的查询:
PayPeriod.where(%q{ (start_time, end_time) OVERLAPS (?, ?) }, self.start_time, self.end_time).first
课程:
class Record < ActiveRecord::Base
...
validates :start_time, presence: true
validates :end_time, presence: true
...
end
class PayPeriod < ActiveRecord::Base
...
validates :start_time, presence: true
validates :end_time, presence: true
...
end
我知道我需要用记录预加载PayPeriods。我真的很挣扎着怎么做。
答案 0 :(得分:0)
您始终可以使用纯SQL作为where
方法的参数。请注意,表名通常是复数。
我想Record
有很多PayPeriods
,但它可能看起来像:
Record.where(start_time: (start_time..end_time))
.joins(pay_periods)
.where('(pay_periods.start_time, pay_periods.end_time) OVERLAPS (records.start_time, records.end_time)')