嵌套表单 - 如何将现有嵌套对象添加到父表单?

时间:2011-05-12 16:37:42

标签: ruby-on-rails forms relationship

我的模型设置为多对多关系:

class Workshop < ActiveRecord::Base
  has_many :workshop_students
  has_many :students, :through => :student_workshops

  accepts_nested_attributes_for :students
end

class Student < ActiveRecord::Base
  has_many :student_workshops
  has_many :workshops, :through => :student_workshops

  accepts_nested_attributes_for :products
end

class StudentWorkshop < ActiveRecord::Base
  belongs_to :student
  belongs_to :workshop
end

如上所述,学生可以参加许多研讨会,研讨会可以有很多学生。

我查看了以下Rails演员:herehere。我偶然发现的大多数在线资源仅显示了如何在父表单中创建新对象的嵌套表单。

我不想创建新对象。我只想将现有对象添加到父窗体。所以举个例子。如果我决定创建一个新的研讨会,我想将现有的学生分配到研讨会。

我不明白的一件事是,如何将学生链接到研讨会表格?第二,当params通过时,控制器方法中应该有什么更新/创建?

如果有人能指出我正确的方向,我将不胜感激。

2 个答案:

答案 0 :(得分:5)

最简单的方法是:

<%= f.collection_select(:student_ids, Student.all, :id, :name, {:include_blank => true}, {:selected => @workshop.student_ids, :multiple => true} )%>

您不必在创建操作中执行任何操作。

答案 1 :(得分:0)

好的,对于未来遇到同一问题的任何人。我提出的解决方案是def create。我能够访问名为student_ids的POST属性,该属性以数组的形式出现