Rails 动态表单字段和 AJAX 提交

3
我有一个Ruby on Rails应用程序,其中包含嵌套属性的表单。此表单允许使用一些javascript动态添加字段。该表单还通过AJAX在模糊状态下提交自身。
一切都很好,唯一的问题是围绕动态添加字段的问题。
当通过Javascript添加动态字段时,它们被分配一个唯一的ID。但是,表单字段的ID和名称模式显然与Rails生成的字段不匹配。
由于AJAX表单提交,每次更改表单时动态添加的字段都会创建新的数据库条目。
我需要找到一种优雅的方式来处理这个事实:我需要检索Rails生成的表单并在AJAX提交后修改/替换页面上的表单 - 否则,新字段将继续复制!
您可以在以下链接中查看我的代码:https://github.com/michaelward82/WeddingPlanner/tree/UI (如果我的Rails代码不够干净,请谅解,这是我第一次尝试真正的Rails项目,并且我仍在学习模式)

你有必要在父记录被创建之前允许创建子记录吗(通过你的 AJAX 请求)? - coreyward
父级已经被创建。预算是与用户同时创建的,属于该用户。我们通过嵌套字段在预算展示操作中允许添加预算项目到预算中。问题在于任何动态添加的预算项目都被视为新的,直到用户刷新页面并获得由Rails生成的表单为止。刷新页面或避免使用AJAX似乎不是一种优雅的解决方案。 - michaelward82
听起来你需要BudgetItems#new返回新对象,不带布局渲染,然后你的JavaScript可以直接替换页面上该对象的HTML。 - coreyward
我找到了返回整个表单部分的方法。但由于表单更新太频繁,这并不实用。目前我已经决定使用提交按钮,并允许Rails重新生成表单。我不确定AJAX自动保存所产生的负载是否过大。如果有人能想出一个优雅的解决方案... - michaelward82
我在解决类似问题时找到了一个解决方案,也许我能提供帮助。您可以再次提供代码吗?链接已失效 :) - grzuy
1个回答

1
我认为你缺少的是在belongs_to关联上加上dependent => :delete_all参数。这会让Rails在保存新的预算条目时删除旧的条目。
# budget_item.rb
belongs_to :budget, :dependent => :delete_all

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接