【发布时间】:2011-10-09 16:56:14
【问题描述】:
我有一个带有嵌套属性的表单的 Ruby on Rails 应用程序。此表单允许使用一些 javascript 动态添加字段。该表单还通过 AJAX 在模糊上提交。
一切都很好,除了一个围绕动态添加字段的问题。
通过 Javascript 添加动态字段时,会为其分配一个唯一 ID。但是,表单字段的 ID 和名称模式显然与保存字段后 Rails 生成的名称不匹配。
由于 AJAX 表单提交,每次表单更改时,动态添加的字段都会创建一个新的 DB 条目。
我需要找到一种方法来优雅地处理这样一个事实,即我需要在 AJAX 提交后检索 rails 生成的表单并修改/替换页面上的表单 - 否则新字段将继续复制!
您可以在以下位置查看我的代码:https://github.com/michaelward82/WeddingPlanner/tree/UI
(抱歉,如果我的 Rails 代码不是最干净的,这是我第一次真正尝试真正的 Rails 项目,我仍在学习模式)
【问题讨论】:
-
您是否有理由需要在创建父记录之前允许创建子记录(通过您的 AJAX 请求)?
-
父级已经创建。预算与用户同时创建,并且属于该用户。通过预算显示操作,我们使用嵌套字段来允许将预算项目添加到预算中。问题是任何动态添加的预算项目都被视为新项目,直到用户刷新页面并获得由 rails 生成的表单。刷新页面或避免使用 AJAX 感觉不是一个优雅的解决方案。
-
听起来你需要
BudgetItems#new来返回没有布局的新对象,然后你的javascript可以替换页面上该对象的HTML。 -
我找到了返回整个表单部分的方法。这是不切实际的,因为表单更新太频繁了。目前,我已经放弃使用提交按钮并允许 rails 重新生成表单。我不确定从 AJAX 自动保存生成的负载是否太多而无法处理。如果有人能想出一个优雅的解决方案......
-
我遇到了类似问题的解决方案,也许我可以提供帮助。能再提供一下代码吗?链接坏了:)
标签: ruby-on-rails ajax forms ruby-on-rails-3.1