/ / Оновлення кількох стовпців у таблиці об’єднань у Rails 4 - ruby-on-rails, ruby-on-rails-4, activerecord, formbuilder

Оновлення декількох стовпців у таблиці приєднання в Rails 4 - rubin-on-rail, ruby-on-rails-4, activerecord, formbuilder

У мене трохи проблем з приводу роботи мого коду -

У мене є кілька моделей - Student, Course, і CourseStudents, таблиця об’єднань між ними. A Student можуть бути призначені кілька Courses через CourseStudents модель

student.rb

has_many :courses, :through => :course_students

course.rb

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)] - іншими словами, передайте об’єкт через форму виділення замість ідентифікатора або перетворіть ідентифікатор під час обробки.

Відповіді:

2 для відповіді № 1

Рейки забезпечує relation_ids= метод для відносин has_many (док). Тож ви можете просто призначити ідентифікатори курсів студенту.

student.course_ids = [1,2]