我在使代码工作时遇到了一些麻烦 -
我有几个模型 - 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
个对象,而不是ID。我不确定如何将这些ID动态转换为对象。
如果有用,我的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)]
的方法 - 换句话说,通过选择表单而不是ID传递对象,或者在处理时转换ID。
答案 0 :(得分:2)
Rails为has_many关系提供relation_ids=
方法(doc)。所以你可以只为学生分配课程ID。
student.course_ids = [1,2]