我创建了一个复杂的嵌套表单,但是我的应用程序根据该表单的输入正确创建/编辑记录的部分出现问题。
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相关(我认为)问题:
我的表单永远不会创建任何新项目!我用来创建嵌套表单的Cocoon gem让我为每个嵌套模型创建表单部分。在Project partial中,由于我的Project模型本身没有:number属性,而是与ProjectNumbers模型有关联,我只是引用了ProjectNumbers的部分及其属性。
如果任务的:project_number,:project_number_type和:owner都匹配与现有项目关联的那些,我需要将我的应用程序edit
带有新任务的现有项目。否则,它应该create
该任务所属的新项目。
我在这里和其他地方阅读了大量的一些代码,但我需要更多的东西,可能包括.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