我有一个公司模型has_many
地址和许多电话。
地址belong_to
公司和电话一样。
我的问题是,我不明白如何edit
公司的特定地址和电话。
在我的edit
操作中,我调用特定记录并将其分配给实例变量(即@address =搜索我想要的特定地址的某个范围),然后在我的fields_for
中我引用了这个孩子的属性,例如:
<%= f.fields_for :addresses, @address do |address| %>
A)我不确定这是不是这样做的。有关如何访问父级特定子项以进行编辑的文档很少。
B)虽然如果update
成功,但是当它失败并且我render :edit
时,视图会显示父节点当前子节点(我在edit
中指定的字段)的其他字段行动+另一个孩子 - 似乎是下一个记录。)
基本上,当render :edit
被调用时,我的表单会扩展为两个孩子。怪异。
这有什么用?嵌套属性如何工作?有没有更好的方法来管理具有多个关联模型的表单?
感谢。
答案 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_form和simple_form宝石来格式化我的嵌套表单,因此您可能需要查看
希望这能让你走上正确的道路!
答案 2 :(得分:-1)
这些截屏视频可以为您提供超过数千字的帮助。