Похоже, вы хотите использовать связь «многие ко многим» между students
и courses
. Есть несколько способов добиться этого. Я бы пошел с опцией has_many :though
, описанной здесь , в которой вы добавили бы дополнительную модель под названием StudentCourse
.
Таким образом, в вашем сценарии вы должны:
сгенерировать эту модель StudenCourse с помощью rails generate model StudentCourse student:references model:references
добавить следующее кВаша Student
модель
class Student
...
has_many :student_courses
has_many :courses, through: student_courses
...
end
добавить следующее к вашей
Course
модели
class Course
...
has_many :student_courses
has_many :students, through: student_courses
...
end
запускать миграции с
rake db:migrate
, теперь вы можете начать добавлять студентов на курсы и наоборот. Например:
Student.last.courses << Course.last
Course.first.students << Student.first
и в ваших контроллерах вы можете просто позвонить student.courses
, чтобы просмотреть курсы, связанные с данным студентом, или course.students
, чтобы просмотреть студентов, проходящих определенный курс.
обратите внимание, как модели Course
и Student
теперь связаны друг с другом с помощью has_many: ..., through: :student_courses
.
Еще одним преимуществом использования этого типа связи «многие ко многим» является гибкость. ,Например, вы можете начать записывать, бросили ли студенты определенные курсы. Вы можете сделать это, просто добавив столбец dropped_at
в эту новую таблицу student_courses
.
РЕДАКТИРОВАТЬ
добавив несколько более подробных примеров использования этой новой ассоциации:
, как уже упоминалось, вы можете добавлять курсы к студентам и наоборот через консоль rails. Например, студент с идентификатором 1 хочет записаться на курс с идентификатором 2:
Student.find(1).courses << Course.find(2)
аналогично, вы можете просто добавить студентов в курсы следующим образом:
Course.find(2).students << Student.find(1)
под капотом обе эти ассоциации будут создавать новый экземпляр класса StudentCourse
, который мы добавили. Таким образом, третий вариант создания этой ассоциации будет:
StudentCourse.create(student: Student.find(1), course: Course.find(2))