У меня есть таблица courses
и таблица volunteer_rosters
.courses
содержит список всех курсов, а volunteer_rosters
содержит список добровольцев, преподающих / помогающих на курсе.
Я хочу написать запрос, который возвращает список всех курсов, которые не не назначены добровольцы.Вот что происходит:
courses
-------
id
1
3
4
5
6
volunteer_courses
-----------------
id 1 course_id 1
id 2 course_id 1
id 3 course_id 1
id 5 course_id 3
id 6 course_id 3
Все приведенные ниже запросы возвращают
course_id 3
course_id 4
course_id 5
Почемуcourse_id 1 (правильно) пропущен, но course_id 3 не является ???
Course.joins("LEFT JOIN student_rosters ON courses.id = student_rosters.course_id where student_rosters.course_id is null")
Course.joins("LEFT JOIN student_rosters ON courses.id = student_rosters.course_id").where(student_rosters: {id: nil})
Course.includes(:student_rosters).references(:student_rosters).where(student_rosters: {id: nil})
Course.includes(:student_rosters).references(:student_rosters).where('student_rosters.id = ?', nil)
Course.joins("LEFT JOIN student_rosters ON courses.id = student_rosters.course_id").where(student_rosters: {id: nil})
Тот же самый точный вопрос, но ни одно из решений не работает для меня:
ЛЕВОЕ НАРУЖНОЕ СОЕДИНЕНИЕ в Rails 4