我在rails中面临以下问题。我有一个表单来编辑/创建一个新项目,该项目可能包含1到n个子项目,这些子项目可以包含1到n个任务。
因此,当我创建一个新项目时,控制器执行:
@project = Project.new
sub_project = SubProject.new
work = Work.new
sub_project.works << work
@project.sub_projects << sub_project
拥有基本结构我在视图中生成输入字段,我构建的表单如下:
项目的
<% form_for (:project, :url => action_parameter, :id => project) do |form| %>
子项目
<% fields_for "project[sub_projects][]", sub_project do |subproject_form| %>
到目前为止一切顺利,但我现在如何为任务定义fields_?以下尝试..
<% fields_for "project[sub_projects][works][]", work do |work_form| %>
..不是解决方案,因为我从Mongrel得到以下错误:
参数的冲突类型 容器。期待一个实例 哈希,但发现了一个Array实例。 这可能是由传递Array引起的 和基于哈希的参数 适量[] =值安培;适量[键] =值
为什么这不起作用?我应该如何解决我的问题?
答案 0 :(得分:1)
您需要使用嵌套的模型表单。查看Ryan Bates的this web cast。
答案 1 :(得分:1)
我的代码不起作用的原因是我忘了在工作行中添加一些额外的括号..
<% fields_for "project[sub_projects][][works][]", work do |work_form| %>
然而,我试图做的事情似乎不适用于预Rails 2.3.X.所以我将我的应用程序更新到该版本,然后使用John Drummond建议的嵌套表单。