ruby-on-rails - 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
.
解决方案
查询您可以如下
House.includes(ownerships: :person).as_json(include: [:people])
这将返回您预期的结果。在您的包含中,您键入房屋 -> 所有权(复数)之间的关系,然后从所有权 -> 个人(由于所有权属于单数)
推荐阅读
- reactjs - 如何将 HOC 组件包装两次
- javascript - 如何在全日历中调整文本框的大小以容纳更多文本
- jupyter-notebook - 删除 Jupyter Notebook 的 Markdown 单元格左侧的空白区域
- flutter - 如何获得视频的实际宽高比?
- excel - 有没有办法使用 IF 函数来遮蔽其他单元格?
- python - 如何为散景应用程序启用简单的烧瓶身份验证服务?
- sql - 对于 Liquibase createView,有没有办法存储子搜索的值?
- php - SMTP 错误的问题:无法验证
- pandas - 为什么这段代码在运行一段时间后会抛出“TypeError:无法解压不可迭代的 int 对象”?
- php - 如何在树视图中隐藏部分字符串?