У меня есть приложение Rails со сложным запросом, который я не могу решить. У меня есть 2 стола, клубы и выборы. Таблица клубы просто так:Сложный запрос внешнего внешнего соединения
id,name
1,A
2,B
3,C
4,D
Таблица выбор содержит выбранные клубы из таблицы клубов всех пользователей:
id,club_id,user_id
1,1,1
2,1,2
3,2,3
4,3,1
5,3,3
Теперь я хочу, выберите поле со всеми элементами таблицы клубов без элементов уже выбранный текущим пользователем (он не может выбрать тот же клуб дважды). Таким образом, в случае пользователя 1, он должен показывать только клубы B и D, потому что он уже выбрал А и С.
Так что я создал это в качестве рамки в модели:
scope :selectable, ->(current_user) {
joins('LEFT OUTER JOIN selections ON selections.club_id = clubs.id').
where('selections.id IS NULL OR selections.user_id != ?', current_user.id).
group('clubs.id')
}
это работает отлично, когда есть только один пользователь, делающий выбор, но если больше пользователей выбрали тот же клуб, что и текущий пользователь, эти клубы все еще появляются. Что я могу улучшить, чтобы показать правильные клубы?
Я не знаю о «элегантный», но это, как я хотел бы сделать это, для конечно. – MrTheWalrus