在Rails 4中更新连接表中的多个列

时间:2015-05-19 04:40:15

标签: ruby-on-rails ruby-on-rails-4 activerecord formbuilder

我在使代码工作时遇到了一些麻烦 -

我有几个模型 - StudentCourseCourseStudents,两者之间的连接表。可以通过Student模型将Course分配给多个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个对象,而不是ID。我不确定如何将这些ID动态转换为对象。

如果有用,我的CourseStudents表非常简单。它有一个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。

1 个答案:

答案 0 :(得分:2)

Rails为has_many关系提供relation_ids=方法(doc)。所以你可以只为学生分配课程ID。

student.course_ids = [1,2]