如何建模多对多关系,与多个关系轨道相关联

时间:2017-03-31 15:21:11

标签: ruby-on-rails

我有以下情况:

学生are_to并且有很多课程,
课程有很多课程 课程属于课程

这是我目前的模特:

class eventHandler(object):
    def create_event(self, event):
        """A general note here.

        :tagged param event:
            description
        :tagged type event:
            :class: `another class` # I do not understand the comma splices ( ` ).
        """
        # I do not understand why it ends here with no real purpose. Perhaps I'm not catching on to something.

    def next_event(self, event):
        ...
        # Continues with the same logic from above

因此,学生被分配到一门或多门课程,而课程有很多课程。 我如何对其进行建模,以便我可以检索学生和所有属于课程的学生的所有课程的所有课程?

1 个答案:

答案 0 :(得分:1)

使用原生has_and_belongs_to_many关系并指定Student有多个Lessons Courses

class Student < ActiveRecord::Base
  has_and_belongs_to_many :courses
  has_many :lessons, through: :courses
end

class Course < ActiveRecord::Base
  has_and_belongs_to_many :students
  has_many :lessons
end

class Lesson < ActiveRecord::Base
  belongs_to :course
end

这是HABTM关系的迁移:

class CreateStudentsCourses < ActiveRecord::Migration
  create_table :students_courses, id: false do |t|
    t.belongs_to :student, index: true
    t.belongs_to :course, index: true
  end
end

通过这种方式,您可以获得所有学生的课程@some_student.lessons,但不幸的是,您无法获得@some_lesson.students,因为没有belongs_to :through关联,但您可以委派students方法:

class Lesson < ActiveRecord::Base
  belongs_to :course
  delegate :students, to: :course
end

这样,调用@lesson.students,方法students将在关联的Course上调用,该方法已定义此方法。