在rails中使用accepts_nested_attributes_for的三层嵌套表单
Posted
技术标签:
【中文标题】在rails中使用accepts_nested_attributes_for的三层嵌套表单【英文标题】:Three level nested forms in rails using accepts_nested_attributes_for 【发布时间】:2010-11-16 06:55:08 【问题描述】:我一直在尝试在我的 rails 应用程序中使用 accepts_nested_attributes_for
实现动态多模型表单。我一直在关注 Eloy Duran 的 complex-forms example,它显示了 2 级实现,但我一直在尝试将其扩展到 3 级。 accepts_nested_attributes_for
是否支持 3 级表单?谁能告诉我如何扩展示例应用程序?
我的 javascript 在第 3 级部分工作(由于某种原因并不总是有效),但我无法保存第 3 级对象。它为每个属性传递的参数名称是:
greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute]
曾祖父母是表单的对象,祖父母是第一层,父母是第二层,对象是第三层(我要保存的那个)。
谢谢,感谢任何指点。
【问题讨论】:
【参考方案1】:我已更新我的complex-form-examples 以使用 Rails 2.3。有关深度嵌套模型的示例,请参阅 deep branch。
git clone git://github.com/ryanb/complex-form-examples.git
cd complex-form-examples
git checkout -b deep origin/deep
rake db:migrate
script/server
这是迄今为止我见过的最干净的解决方案。如果您发现任何错误或改进,请add an issue on GitHub。
【讨论】:
嗨 Ryan - 您能否评论一下在 Rails 3 中实现深度分支可能需要进行的任何更改? 查看 Railscasts 第 196 和 197 集了解我的最新解决方案。它应该可以与深度嵌套一起使用,并且在 Rails 3 中只需进行一些更改。 railscasts.com/episodes/196-nested-model-form-part-1【参考方案2】:首先感谢 Ryan 发布您的解决方案。
它在两级形式中确实工作得很好,但是我在更深的嵌套形式中使用它时遇到了问题。
如果我想将 add_child_link
放入另一个已添加的部分,Firebug 会给我一个 javascript 错误。似乎有一个逃逸的错误。
我已经尝试通过将另一个选项传递给链接方法来避免转义内部部分,但这不知何故不起作用。
def add_child_link(name, f, options)
fields = new_child_fields(f, options)
fields = escape_javascript(fields) unless options[:already_escaping] == true
link_to_function name, %
var new_object_id = new Date().getTime();
var html = jQuery("#fields".replace(/#options[:index]/g, new_object_id)).hide();
html.appendTo(jQuery("#options[:where]")).show();
end
有什么提示吗?
最好的问候,
迈克
【讨论】:
以上是关于在rails中使用accepts_nested_attributes_for的三层嵌套表单的主要内容,如果未能解决你的问题,请参考以下文章
Rails:在 Rails 视图中使用 javascript 函数的正确语法
如何在 Webpacker 中使用 Rails Url 助手/Rails 5.1 中的 React-rails
在 rake 任务中使用 rails logger,rails 5