【发布时间】:2020-09-08 05:40:33
【问题描述】:
情况
我有以下 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 无关。
【问题讨论】:
-
你试过
House.all.as_json(include: {ownerships: :person})或House.all.preload(:people).as_json(include: {ownerships: :person})。一般来说,我会推荐使用真正的演示者模式,我非常偏爱grape和grape-entity进行 API 交互,因为 DSL 非常可重用和灵活
标签: ruby-on-rails ruby many-to-many has-many-through