Обновление нескольких столбцов в таблице соединений в Rails 4

У меня возникли проблемы с тем, чтобы мой код работал -

У меня есть несколько моделей - 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)] — другими словами, передать объект через форму выбора вместо идентификатора или преобразовать идентификатор во время обработки.


person Alexander Lozada    schedule 19.05.2015    source источник


Ответы (1)


Rails предоставляет метод relation_ids= для отношений has_many (doc ). Таким образом, вы можете просто назначить идентификаторы курсов студенту.

student.course_ids = [1,2]
person dimuch    schedule 19.05.2015
comment
У меня действительно, должно быть, были жареные мозги - спасибо! Кроме того, если кто-то увидит это в будущем, не забудьте указать :course_ids => [] в разрешенных параметрах. - person Alexander Lozada; 20.05.2015