更新 Rails 中联接 table 中的多个列 4

Updating multiple columns in a joins table in Rails 4

我在让我的代码正常工作时遇到了一些麻烦 -

我有几个模型 - StudentCourseCourseStudents,两者之间有一个连接 table。一个Student可以通过CourseStudents模型分配给多个Course

student.rb

has_many :courses, :through => :course_students

course.rb

has_many :students, :through => :course_students

这是学生注册表单中的一些工作示例。假设每个学生一次只能注册两门课程。此表单将 return 参数 :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 个对象,而不是 ID。我不确定如何即时将这些 ID 转换为对象。

如果有帮助,我的CourseStudentstable相当简单。它有一个 course_idstudent_id 字段。不幸的是,我不知道如何进入并迭代地插入一条记录 course_id: 1student_id: 1course_id: 2student_id: 1


TL:DR;

我需要一种与 Student.first.courses = [Course.find(1), Course.find(2)] 等效的方法 - 换句话说,通过选择表单而不是 ID 传递对象,或者在处理时转换 ID。

Rails 为 has_many 关系 (doc) 提供 relation_ids= 方法。因此,您只需将课程 ID 分配给学生即可。

student.course_ids = [1,2]