Таким образом, учащийся может пройти много курсов, персонал может преподавать много курсов, за курсами следуют 1 или более студентов, и его обучают 1 или более сотрудников. Читая это: вам нужен объединительный стол.
Тем не менее, как обычно, есть много разных подходов для этого. Позвольте мне начать с самого простого: создайте две таблицы соединения: followed_courses
и lectured_courses
.
Class FollowedCourse
belongs_to :student
belongs_to :course
Class LecturedCourse
belongs_to :lecturer
belongs_to :course
Class Course
has_many :followed_courses
has_many :students, through: :followed_courses
has_many :lectured_courses
has_many :lecturers, through: :lectured_courses
Class Lecturer
has_many :lectured_courses
has_many :courses, through: :lectured_courses
Class Student
has_many :followed_courses
has_many :courses, through: :followed_courses
(«Посох» - это запутанное слово в ruby на рельсах, так как оно не имеет множественного числа:как вы указываете групповой штатный сотрудник против одного сотрудника, поэтому я предлагаю lecturer
здесь, но, конечно, вы могли бы использовать учителя или что-то подобное).
Что я могу себе представить, так это то, что у человека иногда есть роль ученика, а иногда роль учителя, так что у вас может быть другая таблица соединений, называемая ParticipatingCourses
, где он принадлежит_ человеку икурс, и играет роль, чтобы указать, как они участвуют: студент или преподаватель. Это немного усложняет ситуацию, поэтому я думаю, что сейчас было бы проще остаться с моим первым предложением.