2

这是对上一篇文章的重新编辑

我以前认为这个问题与茧有关,但现在我不这么认为,因为下面的代码甚至没有调用茧

每次我更新包含嵌套属性的表单时,嵌套记录的数量都会翻倍。据我所知,在调用表单时会发生这种情况,因为在我做任何事情之前我会立即看到更新,并且表单显示有重复的条目

我在下面的 HAML 中有我的视图的相关代码 -

  %h3 Household Members
    = f.simple_fields_for :neighbors   do  |neighbor|
    = render 'neighbor_fields', :f => neighbor

我在控制器上使用了像样的曝光,所以控制器看起来像这样:

class HouseholdsController < ApplicationController

  expose(:households)
  expose(:household, strategy: StrongParametersStrategy)

  def create
    if household.save
      redirect_to households_path, notice: 'Household was successfully created.'
   else
     render 'new'
   end
 end

def update
  if household.save
    redirect_to households_path, notice: 'Household was successfully updated.'
  else
    render 'edit'
  end
end

def destroy
  household.destroy

redirect_to households_path, notice: 'Household deleted.'
end

如何防止嵌套属性加倍?

4

1 回答 1

4

我以前从未使用过像样的曝光,但是我在使用嵌套形式时遇到了同样的问题,无论有无茧,两种情况下的原因都是相同的。它与强参数有关,而不是:id嵌套属性的白名单。

我不确定我是否完全明白你想要做什么,所以我会给出一个经典的帖子/评论示例。如果您有一个帖子表单,并且想要动态添加评论字段,那么控制器中的强参数将如下所示。

params.require(:post).permit(:content, comments_attributes: [:id, :content, :_destroy])

您需要将 , 和嵌套字段具有的任何其他属性列入白:id名单:_destroy。如果评论没有:id关联,则 rails 认为这是一条新评论并为其创建新记录。当您将 列入白名单时:id,rails 知道它是现有对象,然后更新它。

于 2013-11-17T03:14:45.863 回答