【问题标题】:Nested form - how to add existing nested object to parent form?嵌套表单 - 如何将现有嵌套对象添加到父表单?
【发布时间】:2011-05-12 16:37:42
【问题描述】:

我已经为多对多关系设置了模型:

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。而且我偶然发现的大多数在线资源只展示了如何使用嵌套表单在父表单中创建新对象。

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

我不明白的一点是,如何将学生链接到研讨会表格?其次,当参数传递时,更新/创建的控制器方法应该是什么?

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

【问题讨论】:

  • “嵌套表单”不是合法的 HTML。
  • 我认为他的意思是单个表单中的嵌套对象。
  • 感谢您解决这个问题。这就是我的意思。

标签: ruby-on-rails forms relationship


【解决方案1】:

最简单的做法是:

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

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

【讨论】:

  • 我从经验中学到了避免 HABTM 并使用 HMT (has_many :through => )。这为您提供了一个模型,其中包含您以后可以添加的属性。即使“稍后”仅出现 10% 的时间,到那个“时间”,这些东西已经深深嵌入并且改变的主要痛苦。最好一开始就灵活安排。有些人实际上认为 HABTM 在这一点上已被弃用,即它有效但不是最佳的。
  • 我希望我能对 cme​​ts 投反对票。 HABTM 不会也不会被弃用。
【解决方案2】:

好的,对于将来遇到相同问题的任何人。我想出的解决方案是在 def create 中。我可以访问一个名为 student_ids 的 POST 属性,它以数组的形式出现

【讨论】:

  • 您能否详细说明您为解决此问题所做的工作?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-28
相关资源
最近更新 更多