如何获取子记录的属性

时间:2016-10-21 12:04:43

标签: ruby-on-rails ruby activerecord

我正在开发一个模型结构如下的项目:

Person has many Pets has many collars has a colour

我有一个活跃的人物记录,我想得到那些人的宠物的所有项圈,颜色='蓝色',但我不知道如何做到这一点。我最初有Collar.Where(colour: 'blue'),但后来我意识到他们必须受到那些人的限制。

对此的任何帮助将不胜感激。

2 个答案:

答案 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 :petPet 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) })