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 符合您的预期结果。
在你的包含中,你输入房子之间的关系 - >所有权(复数)然后从所有权 - >人(单数,因为所有权属于)
情况
我有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 符合您的预期结果。 在你的包含中,你输入房子之间的关系 - >所有权(复数)然后从所有权 - >人(单数,因为所有权属于)