如何修改accepts_nested_attributes_for?

时间:2012-04-20 10:47:45

标签: ruby-on-rails forms nested-attributes

我有一个公司模型has_many地址和许多电话。

地址belong_to公司和电话一样。

我的问题是,我不明白如何edit公司的特定地址和电话。

在我的edit操作中,我调用特定记录并将其分配给实例变量(即@address =搜索我想要的特定地址的某个范围),然后在我的fields_for中我引用了这个孩子的属性,例如:

<%= f.fields_for :addresses, @address do |address| %>

A)我不确定这是不是这样做的。有关如何访问父级特定子项以进行编辑的文档很少。

B)虽然如果update成功,但是当它失败并且我render :edit时,视图会显示父节点当前子节点(我在edit中指定的字段)的其他字段行动+另一个孩子 - 似乎是下一个记录。)

基本上,当render :edit被调用时,我的表单会扩展为两个孩子。怪异。

这有什么用?嵌套属性如何工作?有没有更好的方法来管理具有多个关联模型的表单?

感谢。

3 个答案:

答案 0 :(得分:1)

听起来你在这里之外使用fields_for帮助器。根据您的描述,您希望编辑父母关系之外的地址。如果是这种情况,您将使用form_for帮助程序以自己的形式(可能是自己的控制器)编辑该地址。

如果您想以与父级相同的形式执行任何CRUD操作,那么将使用fields_for,从而利用accepts_nested_attributes_for功能。

答案 1 :(得分:0)

反复观看dmarucco发布的屏幕转换以获得对嵌套表单的良好和一般性的理解,然后使用嵌套表单检查我之前遇到的问题(我也有多对多的关系):

Rails 3.1+ Nested Forms Issue: Can't mass-assign protected attributes

我在该页面的底部发布了我的解决方案。

我还使用nested_formsimple_form宝石来格式化我的嵌套表单,因此您可能需要查看

希望这能让你走上正确的道路!

答案 2 :(得分:-1)

这些截屏视频可以为您提供超过数千字的帮助。