繁体   English   中英

急于加载具有多种条件的多个Rails关联

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM