У меня возникли проблемы с тем, чтобы мой код работал -
У меня есть несколько моделей - Student
, Course
и CourseStudents
, таблица соединений между ними. Student
можно назначить нескольким Course
через модель CourseStudents
.
студент.рб
has_many :courses, :through => :course_students
курс.рб
has_many :students, :through => :course_students
Вот некоторые из рабочих примеров в форме регистрации студента. Давайте представим, что каждый студент может записаться только на два курса одновременно. Эта форма вернет параметры :courses => ["1","2"]
(в зависимости от того, что было выбрано, конечно).
<%= f.fields_for :courses do |course| %>
<%= course.collection_select(nil, Course.all, :id, :name) %>
<%= course.collection_select(nil, Course.all, :id, :name) %>
<% end %>
Это проблема, потому что для назначения курсов студенту Rails ожидает Course
объектов, а не идентификаторов. Я не уверен, как преобразовать эти идентификаторы в объекты на лету.
Если это полезно, моя таблица CourseStudents
довольно проста. У него есть поля course_id
и student_id
. К сожалению, я не вижу, как я могу войти и итеративно вставить запись, говорящую course_id: 1
, student_id: 1
, course_id: 2
, student_id: 1
.
TL:DR;
Мне нужен способ сделать эквивалент Student.first.courses = [Course.find(1), Course.find(2)]
— другими словами, передать объект через форму выбора вместо идентификатора или преобразовать идентификатор во время обработки.