查找未参加特定课程的所有学生

时间:2017-07-31 14:45:52

标签: ruby-on-rails ruby-on-rails-4 activerecord rails-activerecord

我正试图解决这个问题,但直到现在还没有成功。

我有3个模特。

课程模型:

class Course < ActiveRecord::Base
    has_many :student_courses
    has_many :students, :through => :student_courses
end

学生模特:

class Student < ActiveRecord::Base
    has_many :student_courses
    has_many :courses, :through => :student_courses
end

加入模型:

class StudentCourse < ActiveRecord::Base
    belongs_to :student
    belongs_to :course
end

我试图只向那些没有注册当前所选课程的学生发送视图,这与@ course.students相反

我找到了Find all students not enrolled in a class (rails) 这看起来非常有希望,除了它没有包括没有注册任何课程的新生,在那个问题中使用left_outer_joins是一个看起来不适合他们但但不适合他们的提议。帮助我,因为我无法通过4.2.5更新rails,它需要rails 5。

任何人都可以考虑其他解决方案吗?

2 个答案:

答案 0 :(得分:1)

Student.where.not(id: @course.students).all

答案 1 :(得分:0)

在你的课程模型中你可以做这样的事情

class Course < ActiveRecord::Base
    has_many :student_courses
    has_many :students, :through => :student_courses
    ...
    def not_enrolled_students
      Student.where.not(id: self.students)
    end
end

现在,您可以在应用中的任意位置拨打Course.first.not_enrolled_students