我想指定与Person关联的维护和能力的每个条件,并检索它们中的每个条件。
通常,查询将检索包含两个条件的记录:Person。维护和个人能力。
A = Person.maintenances.where(~~~~)
B = Person.abilities.where(~~~)
我想以Person的身份在单个查询中获得上述所有内容。(What I want = A + B in A single query)
另外,我不想有N+1的问题,但我想知道如何防止查询被发出,因为Person的条件。维护和人员。能力是分开的。
class Person << ApplicationRecord
has_many :maintenances
has_many :abilities
end
class Maintenance << ApplicationRecord
belongs_to :person
end
class Ability << ApplicationRecord
belongs_to :person
end
※I'm using MySQL
谢谢。
一个简单的连接应该可以做到:
Person.joins(:maintenance).where(maintenances: {status: 0, example: "yes"}).joins(:ability).where(abilities: {........})
或者类似的东西,应该会产生相同的结果
Person.where(maintenances: Maintenance.where(person: self, ......), abilities: Ability.where(person: self, ......))