属于某个模型类型的热负荷多态模型

时间:2019-03-19 22:41:27

标签: ruby-on-rails eager-loading polymorphic-associations

我的模型中有

class Group < ApplicationRecord      
    has_many :payments, as: :paymentable   
    has_many :users
end

class User < ApplicationRecord  
  has_many   :payments, as: :paymentable   
  belongs_to :group    
end

class Payment < ApplicationRecord  
  belongs_to :paymentable, polymorphic: true
end

我想每组计算用户总付款的总和,因此在控制器中我有以下内容:

Group.all.each do |group|  
  group.users.each do |user|
    user.payments.each do |payment|
         ............
         ...............
    end
  end
end

如何消除n + 1个查询?

我尝试了

Group.includes(:users, :payments).each do |group| 

但是当我想加载属于用户的付款时,这会导致加载属于组的付款...

1 个答案:

答案 0 :(得分:0)

您需要使用Group.includes(users: :payments).each do...来包括通过其用户支付的网上论坛费用。 在这种情况下,发生的事情是我们预取了一组用户以及与每个用户相关的付款。这样,如果您遍历用户并使用user.payments,它将不会再次调用以获取付款。