Rails 多对多 API 查询

Rails many to many API query

情况

我有3个型号如下

class House < ApplicationRecord
  has_many :ownerships
  has_many :people, through: :ownerships
end
class Person < ApplicationRecord
  has_many :ownerships
  has_many :houses, through: :ownerships
end

class Ownership < ApplicationRecord
  belongs_to :house
  belongs_to :person
end

预期结果

基本上,我想以 JSON 的形式进行查询,以获取所有 houses 与关联 people 的列表。关键是有些房子没有任何人,有些人没有房子,所以 Ownership 协会没有所有房子的 ID。如果房子不属于任何人,那么响应应该为 nil。

例如,查询结果如下:

{
  house1: {
    owners: [
      person1,
      person2
    ]
  },
  house2: {
    owners: null
  },
  house3: {
    owners: [
      person2
    ]
  }
}

我试过的

我尝试使用 includes 但我得到了没有关联结构的分离项目数组。

House.all.includes(:people).as_json(include: [:people])

people 值在一个单独的键中,与 houses 无关。

查询可以如下

House.includes(ownerships: :person).as_json(include: [:people])

这将 return 符合您的预期结果。 在你的包含中,你输入房子之间的关系 - >所有权(复数)然后从所有权 - >人(单数,因为所有权属于)