Стремительная загрузка полиморфной модели, которая принадлежит к определенному типу модели - PullRequest
0 голосов
/ 20 марта 2019

В моих моделях у меня есть

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 голосов
/ 20 марта 2019

Вам необходимо использовать Group.includes(users: :payments).each do..., чтобы включить платежи для группы через ее пользователей.В этом случае происходит предварительная выборка пользователей группы вместе с платежами, связанными с каждым пользователем.Таким образом, если вы зацикливаетесь на пользователях и используете user.payments, он не будет звонить для получения платежей снова.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...