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ある - クライアントアソシエーションが1対多です。アドレスと連絡先モデルにはそれぞれ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'
どのようなヘルプも大幅に有効になります。