Всего четыре таблицы - chat_rooms
, chat_messages
, chat_rooms_and_users
и users
:
chat_rooms
- в комнатах есть сообщения и пользователи. chat_rooms_and_users
- Через эту таблицу пользователи подключаются к комнатам.
В каждой комнате может быть два пользователя.
Как найти комнату, зная двух пользователей?
Пробовал вот так:
room = joins(:chat_rooms_and_users)
.find_by(
type: ChatRoom.types[:private],
chat_rooms_and_users: {
user: [user_a, user_b]
}
)
SELECT "chat_rooms".* FROM "chat_rooms" INNER JOIN "chat_rooms_and_users" ON "chat_rooms_and_users"."room_id" = "chat_rooms"."id" WHERE "chat_rooms"."type" = $1 AND "chat_rooms_and_users"."user_id" IN ($2, $3) LIMIT $4 [["type", 0], ["user_id", 497], ["user_id", 494], ["LIMIT", 1]]
Меня это смущает в коде SQL:
"chat_rooms_and_users"."room_id" = "chat_rooms"."id"
Если нет комнат, то первая комната создается нормально. Но тогда всегда есть только комната, ID которой стоит первым, чем остальные.