У меня есть модели User и UserEmails.
Пользовательские столбцы: id, first_name, last_name UserEmails: id, user_id, email, primary
Мне нужна такая функция (https://imgur.com/a/762iK9r)
Суть такова: дублирующиеся пользователи идентифицируются по электронной почте.
Пример: Пользователь 1:
{ id: 1, first_name: 'Test', last_name: 'User1' }
UserEmails для пользователя 1:
{ email: 'same_email3@test.com', primary: true, user_id: 1 }
Пользователь 2:
{ id: 2, first_name: 'Test', last_name: 'User2' }
Электронная почта пользователя для пользователя 2:
{ { email: 'same_email@test.com', primary: true, user_id: 2 }, { email: 'same_email1@test.com', primary: false, user_id: 2 }, { email: 'same_email3@test.com', primary: false, user_id: 2 } }
Пользователь 3:
{ id: 3, first_name: 'Test', last_name: 'User3' }
Электронная почта пользователя для пользователя 3:
{ { email: 'same_email@test.com', primary: true, user_id: 3 }, { email: 'same_email3@test.com', primary: false, user_id: 3 }, { email: 'same_email4@test.com', primary: false, user_id: 3 } }
Мне нужен запрос, который найдет дубликаты и вернет такой массив идентификаторов: [[1, 2, 3], [...]]
У меня есть запрос, но он неправильно отображает массив идентификаторов:
ids = User.left_outer_joins(:user_emails)
.select('array_agg(users.id) AS ids')
.where('user_emails.email IS NOT NULL')
.group("user_emails.email")
.having('COUNT(1) > 1')
.map(&:ids)
Я получаю этот массив, но массив [2, 3]
уже находится в массиве [1,2,3]
.
[[1, 2, 3], [2, 3]]
Как я могу сгруппировать или отсортировать идентификаторы массива, которые не дублироваться в случае отображения дубликатов пользователей по электронной почте?