Я пытаюсь получить пользователей из нескольких групп (с заданными идентификаторами) и исключить пользователей из других групп.Сделайте запрос с activerecord, чтобы получать только пользователей от групп, а не от других.
Я пытался что-то вроде:
User.joins(:groups).where(groups: {id: ["8939","8950"]}).where.not(groups: {id: 8942}).map(&:id)
User Load (0.9ms) SELECT "users".* FROM "users" INNER JOIN "groups_users" ON "groups_users"."user_id" = "users"."id" INNER JOIN "groups" ON "groups"."id" = "groups_users"."group_id" WHERE "groups"."id" IN (8939, 8950) AND "groups"."id" != $1 [["id", 8942]]
=> [119491, 119489, 119490, 119492, 119488, 119484, 119483, 119491, 119482]
Но это не правильно
Пользователям в группе .
Group.find(8942).users.pluck(:id)
Group Load (0.4ms) SELECT "groups".* FROM "groups" WHERE "groups"."id" = $1 LIMIT 1 [["id", 8942]]
(0.6ms) SELECT "users"."id" FROM "users" INNER JOIN "groups_users" ON "users"."id" = "groups_users"."user_id" WHERE "groups_users"."group_id" = $1 [["group_id", 8942]]
=> [119490, 119492, 119491, 119457, 119423]
The where.not
не работает на пользователя "groups"."id" != $1 [["id", 8942]]
. Зачем ?
Благодаря EugZol снова. Ты мой парень поддержки «НЕ СУЩЕСТВУЕТ». Мне определенно нужно узнать больше sql-запроса. С той, которую вы мне даете, у меня небольшая ошибка. 'PG :: UndefinedTable: ERROR: отсутствует запись FROM-clause для таблицы" groups_users " LINE 1: ..." users "WHERE (EXISTS (SELECT 1 FROM groups WHERE groups_use ...' – Mio
Ха-ха, я действительно ' EXISTING' (экзистенциальный?) Support guy :) 'WHERE groups_use' - это ваша опечатка, измените' _' на '.' (' groups.user_id'). – EugZol
'PG :: UndefinedColumn: ERROR: column groups.user_id делает не существует LINE 1: ... «users» WHERE (EXISTS (SELECT 1 FROM groups WHERE groups.use ... 'с вашей версией – Mio