0
속도가 느린 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'
도움이 될 것입니다.