在我的Rails应用程序中,我具有以下关联:
class Person < ApplicationRecord
has_many :payments
def sales_volume(range)
payments.in_range(range).sum(&:amount)
end
...
end
class Payment < ApplicationRecord
belongs_to :person
def self.in_range(range)
select { |x| range.cover?(x.date) }
end
...
end
在我的控制器中,我正在做...
@people = Person.all.sort_by { |p| p.sales_volume(@range) }
...而且有效。
但是,不幸的是,它会生成很多N + 1查询。
有没有一种方法可以显示每个销售量,person
而无需为每个人生成单独的SQL查询?
加成:
我已经尝试过快速加载...
@people = Person.all.includes(:payments).sort_by { |p| p.sales_volume(@range) }
...但是那也不起作用。查询数量仍然相同。
试试看:
@people = Person.all.includes(:payments).where(payments: { date: range }).sort_by { |p| p.payments.sum(&:amount) }
想法是将范围条件直接放入渴望的负载关联中,并更改求和的方式,以避免再次运行查询。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句