首页 > 解决方案 > Rails 多对多 API 查询

问题描述

情况

我有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。如果房子不属于任何人,那么响应应该为零。

例如,查询的结果如下:

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

我试过的

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

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

people值在一个单独的键中,并且与houses.

标签: ruby-on-railsrubymany-to-manyhas-many-through

解决方案


查询您可以如下

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

这将返回您预期的结果。在您的包含中,您键入房屋 -> 所有权(复数)之间的关系,然后从所有权 -> 个人(由于所有权属于单数)


推荐阅读