ruby-on-rails - Rails activerecord找到父给定子模型ID,当父有一个字段是子ID数组时
问题描述
请帮忙。我有一个名为 Estate 的 Activerecord 对象。在 Estate 内部,有一个字段是另一个名为 House 的 Activerecord 对象的 id 数组。所以它看起来像这样;Estate ... houses: [an_array_of_house_ids]
而House id:value ...
. 房子是它自己的东西,与庄园没有关联。现在,如果我有一个任意的house_id
,我如何查询 activerecord 以获取这所房子所属的 Estate,或者它不属于我数据库中的任何 Estate?
例如,假设数据库看起来像这样;
Estate
_____________________________________________
| estate_id | houses |other_fileds|
---------------------------------------------
| 1 | [1, 2, 3, 4] | . |
---------------------------------------------
| 2 | [5, 15, 3, 4] | . |
---------------------------------------------
| 3 | [6, 7, 8, 4] | . |
---------------------------------------------
# The houses fields has arrays of house_ids from the table below
House
_____________________________________________
| house_id | other_fileds|
---------------------------------------------
| 1 | . |
---------------------------------------------
| 2 | . |
---------------------------------------------
| 3 | . |
---------------------------------------------
假设我有 house_id,假设 house_id=3,那么获取这所房子的 Estate_id 的最佳方式是什么?
解决方案
在 House 类中,您可以belongs_to
像这样指定与 lambda 的关联
class House < ApplicationRecord
...
belongs_to :estate, ->(house) { Estate.where("?=ANY(houses)", house.id).first }
...
end
推荐阅读
- java - 在 spring XML 中通过 EL 导入 spring 配置文件
- domain-driven-design - 在 CQRS / 事件溯源中,是否所有数据都需要在命令和事件中?
- javascript - 解构任意对象属性
- javascript - MomentJs 中基于区域的日期格式
- php - 当我使用放入 Rest api 更新数据时,没有显示验证错误?
- .net - “Microsoft.WindowsAzure.Storage.Blob”和“Microsoft.Azure.Storage.Blob”的不同行为
- filter - 确定重复数据的
- python - ^\d+$ 如何评估所有字符必须是数字?
- tensorflow - tensorflow.python.framework.errors_impl.InvalidArgumentError:不兼容的形状:[128,784] vs. [96,784]
- spring-cloud - Spring Cloud Contract Stub Runner 服务器如何将其连接到 Artifactory 存储库并通过 REST 获取存根工件文件?