更新 Rails 中联接 table 中的多个列 4
Updating multiple columns in a joins table in Rails 4
我在让我的代码正常工作时遇到了一些麻烦 -
我有几个模型 - Student
、Course
和 CourseStudents
,两者之间有一个连接 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 转换为对象。
如果有帮助,我的CourseStudents
table相当简单。它有一个 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)]
等效的方法 - 换句话说,通过选择表单而不是 ID 传递对象,或者在处理时转换 ID。
Rails 为 has_many 关系 (doc) 提供 relation_ids=
方法。因此,您只需将课程 ID 分配给学生即可。
student.course_ids = [1,2]
我在让我的代码正常工作时遇到了一些麻烦 -
我有几个模型 - Student
、Course
和 CourseStudents
,两者之间有一个连接 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 转换为对象。
如果有帮助,我的CourseStudents
table相当简单。它有一个 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)]
等效的方法 - 换句话说,通过选择表单而不是 ID 传递对象,或者在处理时转换 ID。
Rails 为 has_many 关系 (doc) 提供 relation_ids=
方法。因此,您只需将课程 ID 分配给学生即可。
student.course_ids = [1,2]