【发布时间】:2021-03-08 16:34:07
【问题描述】:
使用 Rail 6 和 postgres,我需要生成一个对象集合,使用字段 relations 上的项目数组,返回所有与他的关系“重复”的人。
通过此迁移创建的数据库字段:
t.integer :relations, array: true, null: false, default: []
...
add_index :people, :relations, using: :gin
它创建了这个表:
id | name | relations |
------------------------|
1 | João | {nil,1,2,3} |
2 | Maria| {nil,1} |
我需要这样的回报,没有 nil;
[
{id: 1, name: 'João', relation: 1},
{id: 1, name: 'João', relation: 2},
{id: 1, name: 'João', relation: 3},
{id: 2, name: 'Maria', relation: 1}
]
类似那种糟糕的sql:
SELECT id, name, '1' as relation FROM people WHERE 1 = ANY (relations)
union
SELECT id, name, '2' as relation FROM people WHERE 2 = ANY (relations)
union
SELECT id, name, '3' as relation FROM people WHERE 3 = ANY (relations);
tks :)
【问题讨论】:
标签: arrays ruby-on-rails ruby postgresql