[英]Eager Loading multiple rails associations with multiple conditions
我试图减少正在减慢速度的n + 1个查询。 在此示例中,我有三个模型客户端,地址和联系人:
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
这里的地址表是多形的,而联系人-客户的关联是一对多的。 地址和联系人模型均具有布尔属性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'
任何帮助将不胜感激!
@clients = Client.includes([:contacts, :addresses]).where(some_parameters)
然后,您可以在视图中正常引用关系,而无需再次接触数据库,因为表已通过includes方法加载到内存中。
对于条件,这将有助于:
Client.includes([:contacts, :addresses]).where('contact.name = ?', 'example').references(:contacts)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.