【问题标题】:How to edit accepts_nested_attributes_for?如何编辑accepts_nested_attributes_for?
【发布时间】:2012-04-20 10:47:44
【问题描述】:

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

地址belong_to公司和电话一样。

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

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

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

A) 我不确定这是否是这样做的方法。关于如何访问父母的特定孩子进行编辑的文档很少。

B)虽然如果update 成功,这可以正常工作,但当它失败并且我render :edit 时,视图会显示父母当前孩子的附加字段(我在edit 操作中指定的那个+另一个孩子-似乎是下一条记录)。

所以基本上,当调用render :edit 时,我的表单扩展了两个孩子。很奇怪。

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

谢谢。

【问题讨论】:

  • 我不确定我是否完全按照。当您说您正在尝试编辑地址时,您是通过还包含父级的表单执行此操作,还是只是尝试以自己的表单编辑地址记录?我认为是前者,但你的解释听起来像后者。
  • 是的,当我说编辑时,我正在尝试编辑整个嵌套集。看看我为 dmarucco 留下的 cmets。
  • 实际上,在考虑了您的评论之后(以及对 fields_for 方法的更多研究),我意识到 fields_for 循环遍历关联中的每条记录。我试图只选择一条记录——而不是 fields_for 循环的整个集合。但是当我对您的评论进行更多思考时,我实际上想要循环。如果我只想编辑一个地址实例,我可以为此创建一个单独的表单。但作为一个嵌套记录,我想要所有的孩子。刚开始我只是不明白。太糟糕了,您没有将此作为答案发布;-)
  • 是的,我想知道您是否只是在预期目的之外使用 fields_for,这就是我问的原因:) 我将其添加为答案,如果您想接受,请接受.

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


【解决方案1】:

听起来您在此处使用了 fields_for 帮助器超出了它的目的。根据您的描述,您想要编辑其父母关系之外的地址。如果是这种情况,您将使用 form_for 帮助器以自己的形式(可能还有自己的控制器)编辑该地址。

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

【讨论】:

    【解决方案2】:

    大胆地观看 dmarucco 发布的屏幕截图,以对嵌套表单有一个很好的总体了解,然后查看我之前遇到的嵌套表单问题(我也有多对多的关系):

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

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

    我还使用了 nested_formsimple_form gems 来格式化我的嵌套表单,所以你可能想研究一下

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 这些很好,但它们没有显示如何编辑记录。我的问题不是创建复杂的表单,而是编辑现有的嵌套集。因此,如果我有公司 > 地址,那么我创建一个条目,我现在在公司表中有一条记录,在其关联的地址表中有一条记录。然后,如果我稍后添加另一个条目(为公司创建第二条记录,为地址创建第二条记录),我如何将参数传递给表单,以便我可以选择其中的哪些进行编辑?
      猜你喜欢
      • 2011-02-17
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2016-09-25
      • 1970-01-01
      • 2019-11-19
      • 2017-05-05
      相关资源
      最近更新 更多