用cocoon创建复杂的嵌套表单

时间:2013-01-23 06:34:22

标签: ruby-on-rails simple-form nested-forms cocoon-gem

我创建了一个复杂的嵌套表单,但是我的应用程序根据该表单的输入正确创建/编辑记录的部分出现问题。

To-Do场景:我需要逐一将任务输入到我的表单中(每个“提交”按下一个任务),从一堆写有任务的小文件中输入。每个任务都有一个:project_number,一个:project_number_type,以及一个写在其上的所有者。在我的应用程序中,这些属性在模型ProjectNumber(前两个)和Owner,最后一个。 (我必须创建一个单独的ProjectNumber模型,因为我的Projects有时会有多个:project_numbers,其中包含不同的project_number_types。)

class Owner < ActiveRecord::Base
  has_many :projects
  has_many :tasks, :through => :projects
end   

class Project < ActiveRecord::Base
  belongs_to :owner
  has_many :tasks
  has_many :project_numbers
end

class ProjectNumber < ActiveRecord::Base
  belongs_to :project
end

class Task < ActiveRecord::Base
  belongs_to :project

  delegate :owner, :to => :project, :allow_nil => true
end

我的表单显示了上述每个属性的正确嵌套fields_for字段。 (我省略了像accept_nested_attributes_for这样的内容。)

2相关(我认为)问题:

  1. 我的表单永远不会创建任何新项目!我用来创建嵌套表单的Cocoon gem让我为每个嵌套模型创建表单部分。在Project partial中,由于我的Project模型本身没有:number属性,而是与ProjectNumbers模型有关联,我只是引用了ProjectNumbers的部分及其属性。

  2. 如果任务的:project_number,:project_number_type和:owner都匹配与现有项目关联的那些,我需要将我的应用程序edit带有新任务的现有项目。否则,它应该create该任务所属的新项目。

  3. 我在这里和其他地方阅读了大量的一些代码,但我需要更多的东西,可能包括.first_or_initialize中的“what”以及“where”,就像{{ 1}},或/models/task.rb?也许我需要创建自定义的东西?非常感谢!

    编辑:以下是表单部分

    ==== tasks_controller.rb

    /views/tasks/_form.html.slim

    ==== = simple_form_for @task do |f| #project = f.simple_fields_for :project do |project| = render 'project_fields', :f => project

    /views/tasks/_project_fields.html.slim

0 个答案:

没有答案