学校有很多课程。课程有很多部分。学生报名参加课程的一部分。我希望能够找到学校里的所有学生。
Class School < ActiveRecord::Base
has_many :courses
has_many :sections, :through => courses
has_many :students, :through => courses, :through => sections, :through => enrollments
end
Class Course < ActiveRecord::Base
belongs_to :school
has_many :sections
has_many :students, :through => sections, :through => enrollment
end
Class Section < ActiveRecord::Base
belongs_to :course
has_many :students, :through => enrollment
end
Class Student < ActiveRecord::Base
has_many :sections, :through => enrollment
has_many :courses, :through => sections, :through => enrollment
has_many :schools, :through => courses, :through => sections, :through => enrollment
end
当学生报名参加该课程的部分时,注册只是一个包含部分ID和学生ID的表格。
有没有更好的方法来做我想在这里做的事情?
感谢。
答案 0 :(得分:0)
我不确定我是否帮助你,但我会做一些略微不同的关系: 学校有很多课程,课程有很多部分,部分有很多学生通过招生。 这将导致以下模型:
class School < ActiveRecord::Base
has_many :courses
end
class Course < ActiveRecord::Base
belongs_to :school
has_many :sections
end
class Section < ActiveRecord::Base
belongs_to :course
has_many :enrollments
has_many :students, :through => :enrollment
end
class Enrollment < ActiveRecord::Base
belongs_to :section
belongs_to :student
end
class Student < ActiveRecord::Base
has_many :enrollments
has_many :courses, :through => :enrollment
end
这将允许正确引用所有类型的数据。例如,我希望看到第一所学校所有课程的所有部分的所有学生。然后我会使用这样的东西:School.first.courses.map(&:sections).flatten.map(&:students).flatten
。我相信你能够进一步详细说明。