У мене трохи проблем з приводу роботи мого коду -
У мене є кілька моделей - Student
, Course
, і CourseStudents
, таблиця об’єднань між ними. A Student
можуть бути призначені кілька Course
s через 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]