我有3个型号:
class Student < ActiveRecord::Base
has_many :student_enrollments, dependent: :destroy
has_many :courses, through: :student_enrollments
end
class Course < ActiveRecord::Base
has_many :student_enrollments, dependent: :destroy
has_many :students, through: :student_enrollments
end
class StudentEnrollment < ActiveRecord::Base
belongs_to :student
belongs_to :course
end
我希望查询 Courses 表中的课程列表,这些课程在 StudentEnrollments 表中不存在,但与某个学生关联。
我发现也许 Left Join 是可行的方法,但似乎 Rails 中的 join() 只接受表作为参数。
我认为可以实现我想要的 SQL 查询是:
SELECT *
FROM Courses c LEFT JOIN StudentEnrollment se ON c.id = se.course_id
WHERE se.id IS NULL AND se.student_id = <SOME_STUDENT_ID_VALUE> and c.active = true
如何以 Rails 4 方式执行此查询?
任何意见都会受到赞赏。
您也可以传递一个作为 join-sql 的字符串。例如joins("LEFT JOIN StudentEnrollment se ON c.id = se.course_id")
虽然为了清楚起见,我会使用 Rails 标准表命名:
joins("LEFT JOIN student_enrollments ON courses.id = student_enrollments.course_id")
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)