我一直在尝试在我的rails应用程序中使用accepts_nested_attributes_for
实现动态多模型表单。我一直在关注显示2级实现的Eloy Duran的complex-forms example,但我一直在努力将其扩展到3个级别。对于3级表单,是否支持accepts_nested_attributes_for
?谁能告诉我如何扩展示例应用程序?
我已经让第三级的javascript部分工作(并不总是因某种原因而工作),但是我无法保存第3级对象。它为每个属性传递的参数名称是:
greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute]
如果greatgrandparent是表单所用的对象,祖父母是第一级,父级是第二级,对象是第3级(我想要保存的那个)。
谢谢,我感谢任何指示。
答案 0 :(得分:18)
我已更新我的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。
答案 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
有关于此的任何提示吗?
致以最诚挚的问候,
麦克