Я пытаюсь сократить n + 1 запросов, которые замедляют работу. В этом примере я три модели клиенты, адрес и контакты:Eager Загрузка нескольких ассоциаций рельсов с несколькими условиями
class Client < ApplicationRecord
has_many :addresses, as: :addressable
has_many :contacts
end
class Addresses < ApplicationRecord
belongs_to :addressable, polymorphic: true, optional: true
end
class Contacts < ApplicationRecord
belongs_to :clients
end
Вот таблица адресов polymporphic, а контакты - объединение клиентов является один-ко-многим. Каждый из адресов и моделей контактов имеет логический атрибут is_primary.
То, что я хочу сделать, это иметь страницу индекса клиентов, содержащую таблицу имен клиентов, основного контакта и первичного адреса. Следующий SQL-запрос достигает этого, но я хочу знать, как лучше всего сделать это с помощью ActiveRecord.
SELECT clients.id, clients.name, contacts.first_name,
contacts.last_name, addresses.city, addresses.state,
addresses.country
FROM clients
INNER JOIN contacts ON contacts.client_id = clients.id
INNER JOIN addresses ON addresses.addressable_id = clients.id
WHERE contacts.is_primary = TRUE AND addresses.is_primary = TRUE
AND addresses.addressable_type = 'Client'
Любая помощь была бы очень полезной!