我正在开发一个模型结构如下的项目:
Person has many Pets has many collars has a colour
我有一个活跃的人物记录,我想得到那些人的宠物的所有项圈,颜色='蓝色',但我不知道如何做到这一点。我最初有Collar.Where(colour: 'blue')
,但后来我意识到他们必须受到那些人的限制。
对此的任何帮助将不胜感激。
答案 0 :(得分:1)
如果你想获得一个人的名单,其宠物项圈的颜色是蓝色的:
Person.joins(pets: :collars)
.where(collars: { colour: 'blue' })
.group('persons.id')
如果您想获得特定人物的宠物项圈集合(用ids
代替这些人的实际ID):
Collar.joins(pet: :person)
.where(collars: { colour: 'blue' }, persons: { id: ids })
.group('collars.id')
在我假设的最后一个查询中,Collar belongs_to :pet
和Pet belongs_to :person
。
答案 1 :(得分:0)
假设您拥有以下模型:
class Person < ActiveRecord::Base
has_many :pets
has_many :collars, through: :pets
end
class Pet < ActiveRecord::Base
has_many :collars
end
class Collar < ActiveRecord::Base
belongs_to :pet
end
获得某个人的蓝领:
person.collars.where(color: 'blue')
获得特定人群的蓝领:
Collar.
joins(pet: :person).
where(color: 'blue').
where(people: { id: people.map(&:id) })