7

我一直在尝试accepts_nested_attributes_for在我的 rails 应用程序中实现动态多模型表单。我一直在关注 Eloy Duran 的复杂形式示例,该示例显示了 2 级实现,但我一直在尝试将其扩展到 3 级。是否支持accepts_nested_attributes_for3 级表格?谁能告诉我如何扩展示例应用程序?

我已经让 javascript 部分工作(由于某种原因并不总是工作)第三级,但我无法保存第三级对象。它为每个属性传递的参数名称是:

 greatgrandparent[grandparent_attributes][0][parent_attributes][0][object_attributes][1249277008434][attribute] 

曾祖父母是表单的对象,祖父母是第一级,父母是第二级,对象是第三级(我要保存的那个)。

谢谢,我很感激任何指点。

4

2 回答 2

18

我已经更新了我的complex-form-examples以使用 Rails 2.3。有关深度嵌套模型的示例,请参见深度分支。

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

这是迄今为止我见过的最干净的解决方案。如果您发现任何错误或改进,请在 GitHub 上添加问题

于 2009-08-04T23:37:25.480 回答
2

首先感谢瑞安发布您的解决方案。它在两级形式中工作得很好,但是我在更深的嵌套形式中使用它时遇到了问题。如果我想将一个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

有什么提示吗?

此致,

麦克风

于 2009-08-25T10:01:18.177 回答