属于某种模型类型的预加载多态模型
Eager load polymorphic model that belongs to a certain model type
在我的模型中我有
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|
但是当我想加载属于用户的付款时,这会导致加载属于组的付款...
您需要使用 Group.includes(users: :payments).each do...
来包括通过其用户支付的群组费用。
在这种情况下发生的是我们预取一个组的用户以及与每个用户相关的付款。这样,如果您遍历用户并使用 user.payments
,它将不会再次调用以获取付款。
在我的模型中我有
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|
但是当我想加载属于用户的付款时,这会导致加载属于组的付款...
您需要使用 Group.includes(users: :payments).each do...
来包括通过其用户支付的群组费用。
在这种情况下发生的是我们预取一个组的用户以及与每个用户相关的付款。这样,如果您遍历用户并使用 user.payments
,它将不会再次调用以获取付款。