Company has_many :profiles, through: :other_model
Profile has_many :companies, through: :other_model
OtherModel belongs_to :profile
OtherModel belongs_to :company
作为查询的结果,我有一系列公司。
获取所有子输入(配置文件)的更有效方法是什么?
答案 0 :(得分:2)
查询Company
模型时,您可以eager load配置文件:
@companies = Company.where(foo: foo).includes(:profiles)
假设where
的{{1}}查询返回公司的ID为1,2,3
上面的activerecord查询应该在两个查询后执行:
Company
现在,返回的SELECT * FROM companies WHERE (foo = 'foo')
SELECT profiles.* FROM profiles
WHERE (profiles.company_id IN (1,2,3))
将为每家公司提供相应的@companies
,您只需:profiles
即可访问首批公司资料
请注意,获取这些@companies.first.profiles
记录是在不运行任何进一步数据库查询的情况下完成的,这是急切加载的重点
返回的结果将在profiles
中,以便您可以立即获取所有配置文件:
ActiveRecord::Relation
答案 1 :(得分:0)
如果belongs_to :company
型号中存在Profile
关系:
class Profile < ActiveRecord::Base
belongs_to :company
end
表示company_id
模型中的Profile
为<{1}}。
所以你可以这样做:
Profile.where(company_id: companies)
其中companies
是Company
ActiveRecord::Relation
。
结果为SQL
:
"SELECT `profiles`.* FROM `profiles` WHERE `profiles`.`company_id` IN (1, 2)"
<强>更新强>
由于您使用中间模型OtherModel
,您可以执行以下操作:
Profile.where(id: OtherModel.where(company_id: companies).pluck(:profile_id))